В чем может быть ошибка?

berserkk
Дата: 24.05.2011 11:46:23
Раньше библиотеками dll не занимался. Решил сделать:

var
  FHelpTest: TFHelpTest;
  MSCon: TMSConnection;
  procedure ShowHelpTest();export;stdcall;
  procedure GetConnect(Con:TMSConnection);export;stdcall;
implementation

{$R *.dfm}
procedure ShowHelpTest();
begin
 FHelpTest:=TFHelpTest.Create(Application);
 FHelpTest.ShowModal;
 FHelpTest.Free;
end;

procedure GetConnect(Con:TMSConnection);
begin
 MSCon:=Con;
end;
procedure TFHelpTest.FormShow(Sender: TObject);
begin
 MSCon.Connected:=true;
end;

Соответственно, передаю туда коннекшн из приложения:

procedure TMainForm.acTestExecute(Sender: TObject);
var
ShowHelpTest:procedure;
GetConnect:procedure(Con:TMSConnection);
LibHandle:THandle;
begin
 @ShowHelptest:=nil;
 LibHandle:=LoadLibrary('DLL\HelpTest.dll');
 if LibHandle>32 then
 begin
   @GetConnect:=GetProcAddress(LibHandle,'GetConnect');
   if @GetConnect<>nil then
   GetConnect(MainDMUnit.mainDM.connMain);
   @ShowHelpTest:=GetProcAddress(LibHandle,'ShowHelpTest');
   if @ShowHelpTest<>nil then
    ShowHelpTest;
 end;
 FreeLibrary(LibHandle);
end;

При передачи коннекшн есть, но библиотека его не получает :) nil . Почему?
Anatoly Podgoretsky
Дата: 24.05.2011 11:53:35
berserkk
Раньше библиотеками dll не занимался. Решил сделать:

Зачем, крытым хочешь быть?
berserkk
Дата: 24.05.2011 11:56:23
Anatoly Podgoretsky,

Не крытым, а чтобы во-первых каждый раз не собирать полностью проект и во-вторых не загружать в память модуль, если его не будут использовать.
Tactical Nuclear Penguin
Дата: 24.05.2011 11:59:05
berserkk
Anatoly Podgoretsky,

Не крытым, а чтобы во-первых каждый раз не собирать полностью проект и во-вторых не загружать в память модуль, если его не будут использовать.


плакаю

p.s. Брось ты это дело. не нужно тебе dll
Ega
Дата: 24.05.2011 11:59:46
berserkk,

1. ShareMem в uses и там и там.
2. stdcall и там и там.
3. Сначала создать форму, потом передать в неё коннект, и только потом показывать. А пока ты коннект в никуда отдаёшь.
Кроик Семён
Дата: 24.05.2011 12:10:38
Не встречал еще такого объявления:

procedure ShowHelpTest();export;stdcall;

а встречал

library HelpTest;
...
exports
   ShowHelpTest,
   GetConnect;

а это выполняется?
   
   if @GetConnect<>nil then
      GetConnect(MainDMUnit.mainDM.connMain);

это раз,

а два, надо бы наверно:

var
   ShowHelpTest:procedure; stdcall;
   GetConnect:procedure(Con:TMSConnection); stdcall;
berserkk
Дата: 24.05.2011 12:13:55
Спасибо, попробую
Anatoly Podgoretsky
Дата: 24.05.2011 12:15:44
berserkk
Anatoly Podgoretsky,

Не крытым, а чтобы во-первых каждый раз не собирать полностью проект и во-вторых не загружать в память модуль, если его не будут использовать.

То есть ты думаешь, что с ехе если не используется, то загружается в память. Ты где последнии 15 лет был, то что ты описываешь относится к ДОС
Anatoly Podgoretsky
Дата: 24.05.2011 12:16:49
Кроик Семён
Дата: 24.05.2011 12:30:12
P.S.

Кстати, посмотрел сейчас пример в папке SDAC\Demos\Dll, надеясь найти там
какое-нибудь недокументированное откровение о передаче соединения в DLL
с помощю хендла (чтобы не зависеть от версии Delphi и версии SDAC'a).

Так нет, там тоже объект передают.