Какво е най-лесно да конвертирате в компонент UNIT2
Какво е най-лесно да се превърнат в Unit2 компонент?
Искам да споделя с другите своите собствени функции и процедури, но nehochu obnozhat техния изходен код, така че се опитайте да преведете Unit2 в DLL, и аз не се получи.
Тук Unit2.
единица Unit2;
употреби
SysUtils, класове, ValEdit, Дим;
функция Test1 (sourcestr: TStrings): булева;
функция Test1 (sourcestr: TStrings): булева;
Var
аз. Цяло число;
започвам
ако sourcestr.Count> 0 след това да започне
sourcestr [0] "." = LeftTrim (sourcestr [0]) +
Резултат: = True;
сложи край на друг да започне
Резултат: = False;
приключи;
приключи;
Така че аз ще го превърне в DLL.
библиотека lub1;
употреби
SysUtils, класове, ValEdit, Дим;
функционални test2 (sourcestr: TStrings; TextNumber: цяло число): булеви; износ; stdcall;
Var
аз. Цяло число;
започвам
ако sourcestr.Count> 0 след това да започне
sourcestr [0]:. = sourcestr [0] +; "
Резултат: = True;
сложи край на друг да започне
Резултат: = False;
приключи;
приключи;
Аз пиша функции от DLL в програмата по този начин.
функция Test2 (sourcestr: TStrings): булева; далеч; stdcall; външни "lub1.dll";
В резултат на това, ако ти се обадя функция на Unit2,
ако Unit2.Test1 (Memo1.Lines) след звуков сигнал;
След това всичко работи добре,
И ако ти се обадя и съща функция от DLL, програмата се срива с грешка.
процедура TForm1.Button2Click (Sender: TObject);
започвам
ако Test2 (Memo1.Lines) след звуков сигнал;
приключи;
Въпрос: Учителю, какъв е проблемът и как да конвертирате Unit2 в DLL.
. грешка глава. Не в компонента, и разбира се в DLL.
Просто прекалено вече късно.
ShareMem постави модула в раздела Използва в проектния файл и файл с библиотека, самото начало.
употреби
ShareMem, SysUtils, класове, ValEdit, Дим;
.
файла на проекта, което означава, Unit1 Сега започва.
единица Unit1;
употреби
ShareMem, прозорци, Съобщения, SysUtils, варианти, Уроци, графики, контроли, формуляри, диалогови прозорци;
.
Написах правилно.
В резултат на това, програмата се стартира, но когато ти се обадя на DLL се срива и показва прозореца на дебъгер.
Опитах се да стартирате програмата, без да Delphi, резултатът на екрана имах прозорец с надпис.
Testdll възникна проблем LUB1.DLL.
Testdll програма е затворен.
Ако проблемът продължава,
опитайте да рестартирате компютъра си.
И най-интересното е, че е невъзможно да се затвори прозореца. Заслужава го, за да затворите и тя ще се появи отново. Натиснете три бутона за отстраняване на проблема, но прозореца на процеса не се появи.
Хакер бележка.
Ето как да направя
програма
единица Unit1;
употреби
Windows, съобщения, SysUtils, варианти, Курсове, графики, Контроли, формуляри,
Диалози, ExtCtrls, StdCtrls;
тип
TForm1 = клас (TForm)
Label1: TLabel;
процедура FormShow (Sender: TObject);
процедура FormClose (Sender: TObject; Var действие: TCloseAction);
процедура FormCreate (Sender: TObject);
частен
обществен
приключи;
Var
Form1: TForm1;
процедура RunStopHook (-членка. Булев)
stdcall; външни "diks.dll" индекс 1;
използва Windows, съобщения;
Var
SysHook. HHook = 0;
Вятърни. Hwnd = 0;
процедура RunStopHook (Държавен Булева.) за износ; stdcall;
започвам
приключи;
износа RunStopHook индекс 1;
започвам
край.
Ето как функцията е обявен в DLL:
функционални test2 (sourcestr: TStrings; TextNumber: цяло число): булеви; износ; stdcall;
И тук е как тя е обявена в .exe:
функция Test2 (sourcestr: TStrings): булева; далеч; stdcall; външни "lub1.dll";
Както можете да видите, има една малка разлика. Но това е достатъчно, че когато ти се обадя вторият параметър е бил поставен в стека. Този параметър не е заподозрян в DLL и остави в стека в края на Test2. А .EXE вярва, че функцията за отработените газове, се "почистват сами за себе си", защото поканата беше stdcall. и тичам в мухи. TextNumber. И как отборът му ще заловят процесор - ние не знае.
В случай на Test2 компилиран .EXE в - това не се случва. Тъй като втори параметър се предава чрез регистъра и не се нуждае от почистване през стека на замяна.
Обикновено по това ще се случи.
Ето това е по-скоро в съответствие
sourcestr [0]:. = sourcestr [0] +; "
Когато премине в указател към DLL и DLL Memo1.Lines приписва подкани удивителния знак. Тя може да се види, че паметта не е това, което се случва. Но какво точно е и как да го оправя, не е ясно.
> Искам да споделя с другите своите собствени функции и процедури,
няма източник, едва ли някой сериозно да заловят, без да знае какво има вътре.
> Sprashivayuschiy_ (20/10/03 07:14) [9]
>> Искам да споделя с другите своите собствени функции и процедури,
> Не източник едва ли някой сериозно да заловят, без да знае какво
> Inside.
Ако не иска, не би направил.
И вие искате да кажете, че това трябва да се направи DLL?
Рано ли Йеше DLL направя.
прочетете внимателно това, което казах
Но това не е всички бъгове.
Ето една функция.
функционира Test4u (ДСС: TStrings): TStrings;
започвам
Резултат: = TStringList.Create;
Result.BeginUpdate;
опитвам
Result.Add ( "ASDF");
Result.Add ( "ASDF");
Result.Add ( "ASDF");
накрая
Result.EndUpdate;
приключи;
приключи;
Когато аз го наричам от Unit2, това е начинът.
ListBox2.Items: = Unit2.Test4u (Memo2.Lines);
тогава всичко в pordyake. В listboks2 добавя ASDF три пъти.
Заслужава ли си да ми го причина за DLL по същия начин.
ListBox2.Items: = Test4 (Memo2.Lines);. как да получите съобщение за грешка. "Не може да зададете TStringList да TListBoxStrins".
Опитах се да изопачат.
ListBox2.Items.Text: = низ (Test4 (Memo2.Lines));
В резултат на това ListBox2 добавя три странни символи.
Това, което може да бъде свързано. Как да се реши този въпрос.
Заслужава ли си да ми го причина за DLL по същия начин.
ListBox2.Items: = Test4 (Memo2.Lines);, като получаване на съобщение за грешка. "Не може да зададете TStringList да TListBoxStrins".
Били ли сте внимателно прочетете текста, който влиза при priambule на модула
DLL?
> Sprashivayuschiy_ (21/10/03 06:32) [16]
> Ли сте внимателно прочетете текста, който влиза при priambule
> модул
> DLL?
Четох кутията и внимателно, но разбрах, защото на тяхното разбиране на английски език.
Бих искал да прецизен превод на български език.
Благодарим Ви, че най-малко свидетелство за Delphi не питам точно превежда.
Опитайте perevsti себе си, не можете да, вие ще имате точен превод. PS.YA същото на английски език не е силна, но тя има речник.
като този
библиотека Project1;
<Важное примечание относительно менеджера памяти DLL:
ShareMem трябва да е първото устройство в УПОТРЕБА част от библиотеката си проект
и използва точка в проекта на приложението си (изберете Project-Преглед на изходния код),
ако си DLL изнася всякакви процедури или функции, които преминават низове като параметри или характеристики за изпълнение.
Това е необходимо за всички редове (и динамичен massivov- Wasya), които се предават от и към вашето DLL - дори и тези,
са вградени в записи и класове.
ShareMem - единица интерфейс за BORLNDMM.DLL библиотека споделено управление на паметта,
който трябва да бъде инсталиран в същата директория като DLL.
За да се избегне използването на BORLNDMM.DLL, String, вместо да използвате опции или PCHAR ShortString.>
употреби
SysUtils,
класове;
Вие трябва да използвате PChar, а ако искате да се върнете от низ DLL, след това погледнете в същия сайт статия Trepalin Сергей "Професионално развитие на приложения, използващи Делфи". Така че, в една от главите, вие ще намерите статия много полезно, като основа за разбиране на функционирането на DLL.
Ранното и не е необходимо да се скрие кода, за да направим DLL, има прости методи, без това izrascheniya, че е малко вероятно да успее.
Проучване на материалната част.
И все пак защо е криптирана книга Delphi5vol1.pdf, че на вашия сайт. Дали не е възможно да го дешифрира като нещо, което примерите могат да бъдат копирани от там.
След това е криптирана, че не може да копира.
Нямам нищо против, но защо ми се разчете това, което е, че не правят нищо друго? Или може би ще научите най-сетне използване на интернет?
Свалих от друг сайт строг книга. И както се оказва, също е кодирано. Ако можете да дешифрира - тогава декодира, че хората не страдат. Ако това е извън възможностите си, за какво да говорим.
Памет: 0.8 MB
Време: 0.046 гр