Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Exe как Dll [D7, WinXP]


Страницы:   1 2 3

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.


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо