Exe като DLL

Exe Dll харесва

Как да направите изпълним # XA0; файл (Търсейки-файл) да бъдат изнесени функции, както в DLL. Ако е възможно да се пример. Благодаря предварително.

С други думи, се изнасят за EXE, че имате нужда точно като теб eksportiruesh означавано в DLL.

употреби
# XA0; Форми,
# XA0; Unit1 в "Unit1.pas";

функционира Exprt (S: String): String; износ;
започвам
# XA0; Резултати: = S + "износ"
приключи;

започвам
# XA0; Application.Initialize;
# XA0; Application.CreateForm (TForm1, Form1);
# XA0; Application.Run; # XA0;
край.



# XA0; функция Exprt (S: String): String; stdcall; външно "project1.exe";

процедура TForm1.Button1Click (Sender: TObject);
VAR ES: низ;
започвам
# XA0; ES: = Exprt ( "Call");
# XA0; Memo1.Lines.Add (и);
приключи;

Втората молба няма да се стартира.
Има kakayato инициализация грешка.

И аз не казвам, че зачена задължително да работи.
Но процедура Exprt, както виждате, се изнасят без проблеми)

Аз не предлагам да се ангажират с тази глупост и да реализира ekporiruemuyu процедура както трябва да бъде - в DLL.

На първо място, наричайки споразумението не съвпадат
На второ място, линията се използва като параметри

И нула не е маса преместване. Всичко останало е без значение.

> _Anonim # XA0; (05.04.07 10:17)
И в DLL -Ke работи.

> Аз не предлагам да се ангажират с тази глупост и да реализира ekporiruemuyu
> Процедура както трябва да бъде - в DLL.

Е, ако е възможно да се изнася от Търсейки -shki, вие все още се чудите как да импортирате тази функция в друго приложение?

Ядох използвате Търсейки файла като библиотеката в същото време (за разлика от DLL), не са работили секцията с инициализация. За своя код, по принцип, не е от решаващо значение.
Но параметри и правила функцията прави трябва да е същото, ако stdcall и в спецификацията и свързването:

>> функция Exprt (ите: String): String; Износ

>> функция Exprt (ите: String): String; stdcall; Външно "project1.exe";

String Задължително AnsiString не може да бъде ShortString (от кода не се вижда)


> s_ # XA0; (05/04/07 10:52) [7]


> Как да внасят тази функция в друго приложение?

В обичайния начин. По същия начин, както и от DLL.

Но, повтарям, по принцип, да работи тази схема няма.

За две важни причини - при изтегляне Търсейки-модул, тъй като не е библиотеката е правилно конфигурирани и инициализира.

Само за този код е все още критично!)

Тук са абсолютно работещ код за DLL

употреби
форми,
Unit1 в "Unit1.pas";

функция Exprt (S: PChar): PChar; износ;
започвам
Резултати: = PChar (а + "износ")
приключи;

започвам
Application.Initialize;
Application.CreateForm (TForm1, Form1);
Application.Run; # XA0;
край.



функция Exprt (S: PChar): PChar; външно "project1.exe";

процедура TForm1.Button1Click (Sender: TObject);
VAR ES: низ;
започвам
ES: = Exprt ( "Call");
Memo1.Lines.Add (и);
приключи;

Но когато аз правя от първия код Търсейки-капака чрез натискане на бутона във функцията се появява грешка нарушение Exprt Access


> Тук са абсолютно работещ код за DLL


> Резултати: = PChar (а + "износ")

Това е абсолютно неработен код, дори и за монолитни приложения.

Фактът, че такъв код в някои случаи не води до нарушаване на достъпа - само в резултат на добра воля към съдбата на глупаци, болните и пиян.


> s_ # XA0; (05/04/07 11:34) [12]


> Мен е важно да се определи дали вносът е възможно в друга
> Приложения

Вие вече казах - това е възможно.
И вие виждате това, или може би просто не може да компилира приложението за импортиране.

Но процедурите за внос и действителната повикване / изпълнението на процедури при внос - две отчетливи разлики.

На първо място, както виждате, не създава проблеми, възможност за безпроблемно изпълнение на втората зависи от много фактори, двете най-важни от които са били съобщени на вас.


> Тук са абсолютно работещ код за DLL

Но това е абсолютно глупава и безсмислена.

От нашия опит в D6 винаги библиотеката връща низ като PChar
докато не се е случило на библиотеката в памет AV. Може би имам късмет :))


> Критичност на раздел модул инициализация не мога да видя

Никой не инициализира, ако сте на блоковете, от които са изградени EXE-модул. И сред тях лесно MB и обект, в който мениджърът на паметта се реализира, което също изисква инициализация. Поредицата е Резултат: = S + "Износ" е гарантирано да се свържете с управителя

> Но, повтарям, по принцип, да работи тази схема няма да бъде
Но какво да направя, за да най-накрая P А Б С Т Р А Т AAAAAAAAAAAA!


> И какво да направя, за да най-накрая P А Б С Т Р А Т AAAAAAAAAAAA!

И какво от спешната необходимост от такъв извратен?


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

Gmina Skąpe DLL, и след това да промените разширението EXE


> s_ # XA0; (05/04/07 13:22) [18]
> Как да се направи, че миналата P А Б С Т Р А Т AAAAAAAAAAAA!

Защо?)
В DLL-не сте доволни?

Защо?)
> Най-DLL не сте доволни?

Попитах в пълно разбираем въпрос, дали да се направи vzmozhno внесени функция от Търсейки-shki?
Е, ако не е, това, което е възможно за да експортирате функции в един изпълним файл?
Защо?)
Например:
# XA0, аз работя с две приложения, както и един от тях искате да използвате функциите на други приложения.

Авансово казвам, че аз не искам да го използвам всеки DDE, и т.н.


> И един от тях искате да използвате функциите на други приложения

в тези случаи е по-добре като цяло функция направи DLL, който може да juzat две Търсейки
Или пишете EXE като COM-сървър


> s_ # XA0; (05/04/07 16:00) [22]


> Попитах в пълно разбираем въпрос, дали да се направи vzmozhno
> Внесените функция от Търсейки-shki?

Съвсем ясно е за вас и да се отговори - може би.
Но не и в твоя случай.

Можете ли да ми кажете
това, което прави възможно да изнася функции в един изпълним (Търсейки) файл. ((((

Така че изпълнимия файл е точно същата PE модула като DLL.

Възможност за внос-износ, установена в който и да е модул като P ortable E xecutable формат.

И как може да промени една програма, която е в моя случай?
Или това е невъзможно?

Вие не може да го направи.
И не е нужно.
см. [23]

Не е неоснователен на "специфични", където "тя" е гарантирано да работи, аз предлагам да се изнасят / внос / наричаме следната процедура:

процедура MagicEXEImportExportTest;
започвам
# XA0; изход;
приключи;


> s_ # XA0; (05/04/07 16:27) [25]

> Какво направи възможно да експортирате функции в изпълнимия
> (Exe) файл. ((((

Например, за да заредена библиотека те биха могли да
достъп до тези функции чрез GetProcAddress.
Само не питай защо е необходимо.

> Как да направите изпълним # XA0; файл (Търсейки-файл) да бъдат изнесени
> Функция като в DLL. Ако е възможно да се пример. Благодаря предварително.

2Всички: Бих искал да повторя: DLL - елементарен форма
клиент-сървър технология в условията на недостиг на ресурси.

Не измъчвай старата дама, в края на краищата.

Спомням си, се интересуват от този въпрос преди една година, 2-3. резултатите от дискусията Игор Шевченко върнати присъда - в Делфи не може да го направи.

Мисля, че в Делфи можеш да направиш всичко.
Основното нещо - да има желание.

Можете да не, например, да се направи свръзката генерира Delphi премествания маса за EXE-ина.

Вие не казвате. ) А някои момчета нещо и не знам)) ..

Да, наистина, не бях прав - по подразбиране D7 IMAGE_FILE_RELOCS_STRIPPED флаг не е зададен, и по този начин RT, генерирана по подразбиране.