Care este cel mai ușor să se transforme într-o componentă UNIT2

Care este cel mai ușor de a converti la componenta UNIT2?

Vreau să împărtășesc cu alții propriile lor funcții și proceduri, dar nehochu obnozhat codul sursă, așa că încercați să traducă UNIT2 în DLL, și nu am primit.

Aici UNIT2.
Unitate UNIT2;

utilizări
SysUtils, Clase, ValEdit, Dim;

Funcția Test1 (sourcestr: TStrings): Boolean;

Funcția Test1 (sourcestr: TStrings): Boolean;
var
i. integer;
începe
dacă sourcestr.Count> 0 începe apoi
sourcestr [0]: "" = LeftTrim (sourcestr [0]) +
Rezultat: = true;
termina altceva începe
Rezultat: = false;
se încheie;
se încheie;

Așa că se va transforma într-un DLL.
lub1 bibliotecă;

utilizări
SysUtils, Clase, ValEdit, Dim;

funcției Test2 (sourcestr: TStrings; TextNUMBER: Integer): Boolean; export; stdcall;
var
i. integer;
începe
dacă sourcestr.Count> 0 începe apoi
sourcestr [0]:. = sourcestr [0] +;“"
Rezultat: = true;
termina altceva începe
Rezultat: = false;
se încheie;
se încheie;

Am scrie funcții de la dll în program ca asta.
Funcția Test2 (sourcestr: TStrings): Boolean; departe; stdcall; externe "lub1.dll";

Ca urmare, dacă apelați o funcție de UNIT2,
dacă Unit2.Test1 (Memo1.Lines) apoi emite un semnal sonor;
apoi totul merge bine,

Și dacă sunați aceeași funcție de la un dll, programul se blochează cu o eroare.
Procedura TForm1.Button2Click (Expeditor: TObject);
începe
dacă Test2 (Memo1.Lines) apoi emite un semnal sonor;
se încheie;

Intrebare master, care este problema și cum să se transforme UNIT2 în dll.

. Eroarea antet. Nu în componenta, și, desigur, în DLL.
Doar prea târziu deja.

ShareMem a pus modulul în secțiunea Utilizeaza în fișierul de proiect și fișierul bibliotecă, primul.

utilizări
ShareMem, SysUtils, clasele, ValEdit, Dim;
.

Fișierul de proiect, care este, Unit1 acum începe.
Unitate Unit1;

utilizări
ShareMem, Ferestre, Mesaje, SysUtils, variante, Clase, grafică, controale, Formulare, Dialoguri;
.

Am scris corect.

Ca urmare, programul este pornit, dar atunci când apelați accidentele DLL și arată fereastra debugger.
Am încercat să ruleze programul fără Delphi, rezultatul pe ecran am avut o fereastră cu o inscripție.
Testdll a întâmpinat o problemă LUB1.DLL.
Testdll program este închis.

Dacă problema persistă,
încercați să reporniți computerul.
Și cel mai interesant este faptul că este imposibil să se închidă fereastra. Este merită să se închidă și va apărea din nou. Apăsați trei butoane pentru a elimina problema, dar fereastra de proces nu apare.
Notă Hacker.

Iată cum fac eu
program
Unitate Unit1;

utilizări
Ferestre, Mesaje, SysUtils, variante, Clase, grafică, controale, Formulare,
Dialoguri, ExtCtrls, StdCtrls;

tip
TForm1 = class (TForm)
Label1: TLabel;
Procedura FormShow (Expeditor: TObject);
Procedura FormClose (Expeditor: TObject; var Acțiune: TCloseAction);
Procedura FormCreate (Expeditor: TObject);
privat

public

se încheie;

var
Form1: TForm1;

Procedura RunStopHook (stat. Boolean)
stdcall; extern "diks.dll" indicele 1;

utilizează Windows, mesaje;
var
SysHook. HHook = 0;
WND. Hwnd = 0;

Procedura RunStopHook (stat boolean.) la export; stdcall;
începe
se încheie;

Exporturile RunStopHook indice 1;
începe
end.

Iată modul în care funcția este declarată în DLL dumneavoastră:
funcției Test2 (sourcestr: TStrings; TextNUMBER: Integer): Boolean; export; stdcall;
Și aici este modul în care aceasta este declarată în fișierul .EXE:
Funcția Test2 (sourcestr: TStrings): Boolean; departe; stdcall; externe "lub1.dll";
După cum puteți vedea, există o mică diferență. Dar este suficient ca atunci când apelați al doilea parametru a fost plasat pe stivă. Acest parametru nu este suspectat în DLL și a lăsat pe stivă la sfârșitul Test2. Un .EXE consideră că funcția de evacuare este „curățat pentru ei înșiși“, pentru că apelul a fost stdcall. și o pistă în muște. TextNUMBER. Și cum echipa sa va prinde procesor - noi nu știe.

În cazul Test2 compilate în .EXE - acest lucru nu se întâmplă. Deoarece al doilea parametru este transmis prin intermediul registrului și nu necesită curățare în timpul stiva de retur.

Simplu ca acest lucru se întâmplă.

Aici este mai degrabă în linie
sourcestr [0]:. = sourcestr [0] +;“"
Când vom trece într-un pointer la DLL și DLL Memo1.Lines atribute, pentru a determina semnul exclamării. Se poate observa că memoria nu este ceea ce se întâmplă. Dar ce anume este și cum să-l stabilească nu este clar.

> Vreau să împărtășesc cu alții propriile lor funcții și proceduri,
nici o sursă, aproape nimeni nu reține în mod serios, nu știe ce e înăuntru.


> Sprashivayuschiy_ (20.10.03 07:14) [9]
>> Vreau să împartă cu alții propriile lor funcții și proceduri,
> Nici o sursă de aproape nimeni serios reținerea, fără să știe ce
> Interior.

În cazul în care nu a cerut, eu nu aș face.

Și vrei să spui că acest lucru ar trebui să fie făcut DLL?
Mai devreme ai Yeshe faci DLL.

citiți cu atenție ceea ce am spus

Dar asta nu e tot glitches.
Iată o funcție.
funcționa Test4u (: TStrings) RTS: TStrings;
începe
Rezultat: = TStringList.Create;
Result.BeginUpdate;
încerca
Result.Add ( "asdf");
Result.Add ( "asdf");
Result.Add ( "asdf");
în cele din urmă
Result.EndUpdate;
se încheie;
se încheie;
Când l-am suna de la UNIT2, asta e calea.
ListBox2.Items: = Unit2.Test4u (Memo2.Lines);
apoi totul în pordyake. În listboks2 introdus asdf de trei ori.

Merită să-mi cauza DLL în același mod.
ListBox2.Items: = test4 (Memo2.Lines.); cum să obțineți un mesaj de eroare. „Nu se poate atribui un TStringList la TListBoxStrins“.
Am încercat să pervertească.
ListBox2.Items.Text: = String (test4 (Memo2.Lines));
Ca rezultat, ListBox2 inserat trei simboluri ciudate.

Ceea ce acest lucru ar putea fi legate. Cum de a rezolva această problemă.

Merită să-mi cauza DLL în același mod.
ListBox2.Items: = test4 (Memo2.Lines);, cum ar fi un mesaj de eroare. „Nu se poate atribui un TStringList la TListBoxStrins“.
Ai citit cu atenție textul care merge în priambule la modulul
DLL?


> Sprashivayuschiy_ (21.10.03 06:32) [16]
> Ai citit cu atenție textul care merge la priambule
> modul
> DLL?

Am citit poate și cu atenție, dar a înțeles din cauza înțelegerii lor a limbii engleze.
Aș dori exact traducerea în limba română.

Vă mulțumim pentru cel puțin un certificat de Delphi nu a cerut exact traduce.
Încercați perevsti în sine, nu poți, vei avea o traducere exactă. PS.YA același lucru în limba engleză nu este puternic, dar are un dicționar.

ca aceasta

Project1 bibliotecă;

<Важное примечание относительно менеджера памяти DLL:
ShareMem trebuie să fie prima unitate în UTILIZĂRI secțiune a proiectului bibliotecii
și care utilizează secțiunea în proiectul aplicației (selectați Project-View Source),
în cazul în care vă DLL exportă orice proceduri sau funcții care trec șiruri ca parametri sau caracteristici de performanță.
Acest lucru este necesar pentru toate rândurile (și massivov- dinamic Wasya), care sunt transmise și de la DLL dvs. - chiar și cele
sunt încorporate în înregistrările și clase.
ShareMem - o unitate de interfață pentru BORLNDMM.DLL bibliotecă manager de memorie partajată,
care trebuie să fie instalat în același director ca și DLL-ul.
Pentru a evita folosirea BORLNDMM.DLL, String în loc să folosească opțiuni sau PCHAR ShortString.>

utilizări
SysUtils,
clase;

Trebuie să utilizați un PChar, și, dacă doriți să se întoarcă din șirul DLL, apoi uita-te la același site un articol Trepalin Serghei „Dezvoltarea profesională a aplicațiilor folosind Delphi“. Deci acolo, într-unul din capitolele, veți găsi un articol foarte util, oferind o bază pentru a înțelege funcționarea unui DLL.

Timpurie și nu au nevoie pentru a ascunde codul de a face DLL, există metode simple, fără acest izrascheniya, care este puțin probabil să reușească.
Studiu partea materială.

Și totuși, de ce este criptat cartea Delphi5vol1.pdf, că pe site-ul tau. Fie că este imposibil să-l descifreze ca pe ceva ce exemplele pot fi copiate de acolo.

Apoi este criptat, pe care nu ai putut copia.

Nu mă deranjează, dar de ce nu am descifra ce este că nu fac nimic altceva? Sau poate vei învăța la ultima utilizare pe Internet?

Am descarcat de pe site-ul o altă carte mai stricte. Și, după cum se pare, de asemenea, este criptat. Dacă se poate descifra - apoi decoda că oamenii nu suferă. În cazul în care acest lucru este dincolo de capacitățile tale, nimic pentru a vorbi despre.

Memorie: 0.8 MB
Timpul: 0.046 c