Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.01.01;
Скачать: CL | DM;

Вниз

exe как dll-модуль   Найти похожие ветки 

 
dzmitry_li   (2005-11-27 09:09) [0]

я затормозил... идея такая - необходимо что бы было два исполняемых файла, у которых экспортируются функции
то что я написал (тестик):

[code]
program runtest;

uses
 Windows, Messages,
 ShellApi;

{$APPTYPE CONSOLE}

var
Handle: HModule=0;

type
Tlcc_dll_Plugin=function(FileName: PChar): PChar; stdcall;

var
lcc_dll_Plugin: Tlcc_dll_Plugin;

procedure StartPlugin;
begin
// Handle:=LoadLibrary("test.dll");
Handle:=LoadLibrary("test.exe");
if Handle<>0 then
begin
 if GetProcAddress(Handle,"lcc_dll_Plugin")=nil then
  FreeLibrary(Handle) else
 begin
  lcc_dll_Plugin:=GetProcAddress(Handle,"lcc_dll_Plugin");
 end
end;
end;

procedure StopPlugin;
begin
if Handle<>0 then
begin
 FreeLibrary(Handle)
end;
end;

procedure Start;
var
s: string;
begin
StartPlugin;
s:=lcc_dll_Plugin(PChar(ParamStr(0)));
WriteLn(s);
StopPlugin;
end;

begin
Start
end.
[/code]

[code]
//program test;
library test;

uses
 Windows, SysUtils;

function lcc_dll_Plugin(FileName: PChar): PChar; stdcall;
begin
Result:=PChar("test "+FileName);
end;

exports
lcc_dll_Plugin;

begin
end.
[/code]

получаю аксэс виолейш при вызове runtest.exe
если же я раскомментирую две строчки (что в тексте программ) и закоментирую следующие за ними (т.е. просто меняю компиляцию с exe на dll) - ошибки нет, даже работает как надо.
ЧТо необходимо сделать что бы получилось хотемое мною?

(Delphi 2005)


 
jack128 ©   (2005-11-27 11:25) [1]

Был разговор на эту тему в "Системе, API". Насколько я помню, сошлись на том, что дельфя не создает таблицу реалоков, для EXE"шника. Поэтому обращение к константе вот здесь
dzmitry_li   (27.11.05 9:09)
PChar("test "+FileName);

и приводит к AV


 
OldNaum ©   (2005-11-27 12:07) [2]

jack128 ©   (27.11.05 11:25) [1]
если я не ошибаюсь, таблица релоков для ЕХЕ в дельфи все-таки создается. по крайней мере об этом свидетельствует их наличие во многих проверенных, к примеру PEExplorer"ом, дельфовых программах. может вы имели в виду не таблицу релоков?

dzmitry_li   (27.11.05 09:09)
вопрос и правда интересный. у самого пару раз вставал подобная задача, но в итоге использовал иные пути ее решения, т.к. времени на разбирательства было мало.


 
jack128 ©   (2005-11-27 13:06) [3]

Угу, память меня подвела.  Вот та ветка о которой я говорил. http://webfile.ru/656728


 
dzmitry_li   (2005-11-27 14:45) [4]

ну блин...
фигово...
ну ладно, буду выкручиваться...

>PChar("test "+FileName);
>и приводит к AV
а есть и пустые методы - они так же в аксес виолейшн


 
dzmitry_li   (2005-12-01 13:25) [5]

хоть это чуть не так, как я хотел, но по крайней мере получилось вызывать из dll-модуля функции размещённые в вызываемой exe-программе, передавая в инициализируемой процедуры хэндл exe (т.е. не использую LoadLibrary для exe в dll)
надеюсь тем кто надо понял...


 
Игорь Шевченко ©   (2005-12-01 14:45) [6]

jack128 ©   (27.11.05 11:25) [1]

"загрузчик производит настройку адресов только у DLL"


 
Digitman ©   (2005-12-01 15:17) [7]


> передавая в инициализируемой процедуры хэндл exe


с падежами - беда ... сам-то понял что сказал ?


> надеюсь тем кто надо понял


я понял одно - у тебя в голове полная каша.


 
han_malign ©   (2005-12-01 17:37) [8]


> а есть и пустые методы - они так же в аксес виолейшн

"The GetProcAddress function returns the address of the specified exported dynamic-link library (DLL) function.
.................
Return Values

If the function succeeds, the return value is the address of the DLL"s exported function.
If the function fails, the return value is NULL. To get extended error information, call GetLastError. "

function lcc_dll_Plugin(FileName: PChar): PChar; stdcall;
begin
Result:=PChar("test "+FileName);
end;
- а это вообще криминал...


 
dzmitry_li   (2005-12-02 18:52) [9]

провоцируете на оффтоп?

Игорь Шевченко ©   (01.12.05 14:45) [6]
было проверено на VC, оно позволяет

Digitman ©   (01.12.05 15:17) [7]
да, с падежами проблема (а как же, уже сколько времени общаюсь только на мёртвом языке, на котором ну тысяча общается из десяти миллионов носителей)

han_malign ©   (01.12.05 17:37) [8]
procedure Start;
-
StartPlugin;
if @lcc_dll_Plugin<> nil then s:=lcc_dll_Plugin(PChar(ParamStr(0)))
                               else s:="error";
WriteLn(s);
StopPlugin;
end;
тот код ради теста.
а криминал - специально, реально возврат только вида Result:="test", что бы понять какая строка сработала, какая нет.

спасибо всем кто помогал, и спасибо борланду за то что не сделал загрузчика у ехе файла


 
dzmitry_li   (2005-12-02 18:53) [10]

провоцируете на оффтоп?

Игорь Шевченко ©   (01.12.05 14:45) [6]
было проверено на VC, оно позволяет

Digitman ©   (01.12.05 15:17) [7]
да, с падежами проблема (а как же, уже сколько времени общаюсь только на мёртвом языке, на котором ну тысяча общается из десяти миллионов носителей)

han_malign ©   (01.12.05 17:37) [8]
procedure Start;
-
StartPlugin;
if @lcc_dll_Plugin<> nil then s:=lcc_dll_Plugin(PChar(ParamStr(0)))
                               else s:="error";
WriteLn(s);
StopPlugin;
end;
тот код ради теста.
а криминал - специально, реально возврат только вида Result:="test", что бы понять какая строка сработала, какая нет.

спасибо всем кто помогал, и спасибо борланду за то что не сделал загрузчика у ехе файла


 
Набережных С. ©   (2005-12-02 20:27) [11]

А вот я не понимаю, совсем:( Может, кто-нить объяснит ситуацию, в которой может возникнуть такая необходимость? А мы потом все вместе обсудим, насколько такая ситуация натуральна, а насколько искусственно создана, а?


 
dzmitry_li   (2005-12-02 21:08) [12]

пример:
1 продукт: электронная карта
2 продукт: телефонный справочник

они никак не связаны и не должны быть связаны

но возможна взаимосвязь (в редких случаях и тому кому нужно), при этом управление как из 1 продукт, так и из 2 продукт.


 
Набережных С. ©   (2005-12-02 21:21) [13]


> dzmitry_li   (02.12.05 21:08) [12]

А можно еще раз, то же самое, но только по русски?



Страницы: 1 вся ветка

Текущий архив: 2006.01.01;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.028 c
2-1134660500
I am
2005-12-15 18:28
2006.01.01
Шифрование файлов


14-1133727715
Глаз
2005-12-04 23:21
2006.01.01
Какой монитор лучший выбор на сегодня?


1-1133521902
bogdan
2005-12-02 14:11
2006.01.01
Организация авторана


4-1130343710
MaxCmd
2005-10-26 20:21
2006.01.01
Как получить текст из надписа


2-1134627406
highlander
2005-12-15 09:16
2006.01.01
Как правильно составить запрос для вычисления суммы отрицательных