Exe ca dll

Dll Exe place

Cum de a face executabil # XA0; fișier (exe-fișier) exportate funcții, la fel ca în dll. Dacă este posibil exemplului. Multumesc anticipat.

Cu alte cuvinte, sunt exportate în EXE care ai nevoie la fel ca tine eksportiruesh semnificat în DLL.

utilizări
# XA0; Formulare,
# XA0; Unit1 în "Unit1.pas";

funcționa Exprt (s: String): String; Export;
începe
# XA0; Rezultat: = s + "Export"
se încheie;

începe
# XA0; Application.Initialize;
# XA0; Application.CreateForm (TForm1, Form1);
# XA0; Application.Run; # XA0;
end.



# XA0; funcția Exprt (s: String): String; stdcall; extern "project1.exe";

Procedura TForm1.Button1Click (Expeditor: TObject);
es var: String;
începe
# XA0; es: = Exprt ( "Call");
# XA0; Memo1.Lines.Add (clasele);
se încheie;

A doua cerere nu va porni.
Nu kakayato eroare de inițializare.

Și nu spun că lucrați în mod necesar conceput,.
Dar procedura Exprt, după cum vedeți, sunt exportate fara probleme)

Nu sugerez să se angajeze în acest nonsens și să realizeze ekporiruemuyu procedura așa cum ar trebui să fie - în DLL.

În primul rând, de asteptare acordul nu se potrivesc
În al doilea rând, linia utilizată ca parametri

Și zero, nu este masa de relocare. Orice altceva nu contează.

> _Anonim # XA0; (05.04.07 10:17)
Și în dll -Ke funcționează.

> Nu vă sugerez să se angajeze în acest nonsens și să realizeze ekporiruemuyu
> Procedura așa cum ar trebui să fie - în DLL.

Ei bine, în cazul în care este posibil să se exporte din -shki exe, tot întrebam cum de a importa această funcție într-o altă aplicație?

Mâncat utilizați fișierul exe ca bibliotecă în același timp (spre deosebire de dll) nu sunt elaborate secțiunea de inițializare. Pentru codul, în principiu, nu este critică.
Dar apelul parametrii și regulile de funcție trebuie să fie aceeași în cazul în care stdcall și în caietul de sarcini și de conectare:

>> Funcția Exprt (s: String): String; Export

>> Funcția Exprt (s: String): String; stdcall; extern "project1.exe";

String AnsiString Obligatoriu nu poate fi ShortString (de la codul nu este vizibil)


> s_ # XA0; (05.04.07 10:52) [7]


> Cum de a importa această funcție într-o altă aplicație?

În mod obișnuit. În același mod ca și din DLL.

Dar, repet, în general, de a opera acest sistem nu va.

Din două motive importante - atunci când descărcarea de exe-modulul deoarece nu este biblioteca este configurat și corect inițializată.

Doar pentru acest cod este încă la fel de critică!)

Aici sunt absolut cod de lucru pentru a dll

utilizări
Formulare,
Unit1 în "Unit1.pas";

Funcția Exprt (s: PChar): PChar; Export;
începe
Rezultat: = PChar (s + "Export")
se încheie;

începe
Application.Initialize;
Application.CreateForm (TForm1, Form1);
Application.Run; # XA0;
end.



Funcția Exprt (s: PChar): PChar; externă "project1.exe";

Procedura TForm1.Button1Click (Expeditor: TObject);
es var: String;
începe
es: = Exprt ( "Call");
Memo1.Lines.Add (clasele);
se încheie;

Dar când fac din primul cod de exe-capacul prin apăsarea butonului din funcția de eroare apare violare de acces Exprt


> Aici sunt absolut cod de lucru pentru a dll


> Rezultat: = PChar (s + "Export")

Este absolut cod non-de lucru, chiar și pentru aplicații monolit.

Faptul că un astfel de cod, în unele cazuri, nu conduce la o încălcare a accesului - doar rezultatul bunăvoinței pentru soarta proștilor, bolnavi și beat.


> s_ # XA0; (05.04.07 11:34) [12]


> Me important să se stabilească dacă importul este posibil în alte
> Aplicații

deja Ați spus - este posibil.
Și vedeți acest lucru, sau pur și simplu nu v-ar putea compila aplicația de import.

Dar procedurile de import și reale de apel / executarea procedurilor de import - două diferențe distincte.

În primul rând, după cum vedeți, nu cauzează probleme, posibilitatea punerii în aplicare fără probleme a doua depinde de mulți factori, cei doi care cele mai importante au fost comunicate tine.


> Aici sunt absolut cod de lucru pentru a dll

Dar este absolut stupidă și lipsită de sens.

Din experiența noastră la D6 este întotdeauna biblioteca returnează șirul ca PChar
în timp ce nu ar fi avut loc în bibliotecă în memoria AV. Poate am noroc :))


> Criticitate secțiunii modulului de inițializare nu se poate vedea

Nici unul nu inițializate, dacă sunteți pe unitățile din care sunt construite EXE-modul. Și printre ei cu ușurință mb și o unitate de memorie în cazul în care managerul este pus în aplicare, care necesită, de asemenea, de inițializare. Șirul este Rezultat: = s + „Exporturi“ este garantat pentru a contacta managerul

> Dar, repet, în general, de a opera acest sistem nu va fi
Dar ce să facă în cele din urmă la P A B S T A L aaaaaaaaaaaa!


> Dar ce să facă în cele din urmă la P A B S T A L aaaaaaaaaaaa!

Și ce de nevoia urgentă de un astfel de pervers?


> [18] s_ # XA0; (05.04.07 13:22)

Gmina Skąpe DLL, și apoi modificați extensia exe


> s_ # XA0; (05.04.07 13:22) [18]
> Cum de a face ca ultima P A B S T A L aaaaaaaaaaaa!

De ce?)
DLL-nu sunt mulțumiți?

De ce?)
> DLL-nu sunt îndeplinite?

Am întrebat în discuție mai completă de înțeles, dacă pentru a îndeplini funcția de vzmozhno importate din exe-shki?
Ei bine, dacă nu, ceea ce a făcut posibil exportul de funcții într-un fișier executabil?
De ce?)
De exemplu:
# XA0; Eu lucrez cu două aplicații, iar unul dintre ei doresc să utilizeze caracteristicile altor aplicații.

Advance spunând că nu vreau să-l folosească orice DDE etc.


> Și unul dintre ei doresc să folosească funcțiile de alte aplicații

în aceste cazuri, este mai bine funcția de ansamblu a face DLL, care poate juzat două exe
Sau scrie EXE ca un server de COM-


> s_ # XA0; (05.04.07 16:00) [22]


> Am întrebat în discuție mai completă de înțeles, dacă pentru a efectua vzmozhno
> Funcția Importate din exe-shki?

Este destul de clar pentru tine și pentru a răspunde - poate.
Dar nu și în cazul tău.

Poți să-mi spui
ceea ce a făcut posibil exportul de funcții într-un fișier executabil (exe). ((((

Așa că fișierul executabil este exact același modul PE ca DLL.

Abilitatea de a import-export stabilite în orice modul P având în format xecutable ortable E.

Și cum se poate modifica un program care a fost în cazul meu?
Sau este imposibil?

Nu se poate face acest lucru.
Și nu au nevoie.
cm. [23]

Nu a fi nefondate privind „specific“ în cazul în care „ea“ este garantat la locul de muncă, propunem să exporte / import / apelați următoarea procedură:

Procedura MagicEXEImportExportTest;
începe
# XA0; ieșire;
se încheie;


> s_ # XA0; (05.04.07 16:27) [25]

> Ce a făcut posibil exportul de funcții în executabil
> Fișier (Exe). ((((

De exemplu, la biblioteca încărcate ar putea obține
accesul la aceste funcții prin GetProcAddress.
Doar nu întrebați de ce este necesar.

> Cum de a face executabil # XA0; fișier (exe-fișier) exportat
> Funcția ca într-un dll. Dacă este posibil exemplului. Multumesc anticipat.

2all: Aș dori să repet: dll - o formă rudimentară
Tehnologia client-server în condițiile deficitului de resurse.

Nu tortura bătrâna, la urma urmei.

Îmi amintesc interesat de această întrebare cu un an în urmă, 2-3. rezultatele discuției, Igor Shevchenko a revenit un verdict - în Delphi nu se poate face.

Cred că în Delphi poți face totul.
Principalul lucru - să aibă dorința.

Nu poți, de exemplu, pentru a face linkerul genera Delphi relocări de masă pentru exe-in-uri.

Nu mai spune. ) Și niște tipi ceva și nu știu)) ..

Da, într-adevăr, am greșit - implicit D7 IMAGE_FILE_RELOCS_STRIPPED pavilion nu este setat, și, astfel, RT implicit generat.