![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Exe как Dll [D7, WinXP]
s_ © (2007-04-05 09:15:00)Каким образом сделать в исполняемом файле (exe-файле)экспортируемые функции, как в dll. Если можно с примером. Заранее спасибо.
vl_chel (2007-04-05 11:02:00) [41]Сергей М. © (05.04.07 10:17) [3]
Ответ не только правильный но и мудрый
String не обязательно AnsiString может быть и ShortString (из кода не видно)
vl_chel (2007-04-05 10:59:00) [42]Ели Вы используете exe файл как библиотеку то при этом (в отличии от dll) не отработают секции инициализации. Для Вашего кода в принципе это не критично.
Но параметры и правила вызова функций должны совпадать если stdcall то и в описании и в подключении:
>> function Exprt(s:String):String;Export
>>function Exprt(s:String):String;stdcall;External 'project1.exe';
s_ (2007-04-05 10:52:00) [43]> Предлагаю не заниматься ерундой и реализовать экпорируемую
> процедуру как и положено - в DLL.
Ну, если возможно экспортировать из exe -шки, то всё-таки интересно КАК импортировать эту функцию в другом приложении?
s_ (2007-04-05 10:44:00) [44]> _Аноним (05.04.07 10:17)
А в dll -ке работает!!!
Сергей М. (2007-04-05 10:36:00) [45]
> _Аноним (05.04.07 10:17) [4]
А в нулевых отсутствует таблица релокации. Все остальное совершенно не важно.
_Аноним (2007-04-05 10:17:00) [46]Во первых, соглашения о вызовах не соответствуют друг другу
Во вторых, используются строки в качестве параметров
Сергей М. (2007-04-05 10:17:00) [47]А я и не говорил, что задуманное тобой обязательно будет работать.
Но процедура Exprt, как видишь, экспортируется без проблем)
Предлагаю не заниматься ерундой и реализовать экпорируемую процедуру как и положено - в DLL.
s_ (2007-04-05 09:50:00) [48]У меня не получается. Вот код:
{Экспортируемое приложение}
program Project1;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
function Exprt(s:String):String;Export;
begin
Result:=s+' Exports'
end;
exports
Exprt;
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
...................
{Приложение для импорта}
function Exprt(s:String):String;stdcall;External 'project1.exe';
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var es:String;
begin
es:=Exprt('Call');
Memo1.Lines.Add(es);
end;
Второе приложение не запускается.
Там какаято ошибка инициализации.
Сергей М. (2007-04-05 09:18:00) [49]Для PE-модулей безразлично, каким конкретно модулем экспортируется некий адрес, будь то хоть ЕХЕ хоть DLL. Разницы никакой.
Иными словами, экспортируй в ЕХЕ то что тебе нужно точно так же как ты экспортируешь оное в DLL.