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

Вниз

DLL   Найти похожие ветки 

 
snake1977   (2003-11-18 08:57) [0]

Здравсвуйте!! я пытаюсь использовать в совем проекте DLL. Нашел кучу примеров, везде по разному описанно как использовать в DLL форму. я передаю в DLL Application и Screen, соответсвенно присваивая их, вот то как я делаю:

var
DLLApp: TApplication;
DLLScr: TScreen;

procedure DoneDll; StdCall;
begin
Screen := DLLScr;
Application := DLLApp;
end;

procedure InitDll(App:TApplication; Scr:TScreen; DB:TDataBase); StdCall;
begin
DLLScr := Screen;
Screen := Scr;
DLLApp := Application;
Application := App;
StoreINILevel:=INILevel;
INILevel:=inRegistry;
with TMyForm.Create(Application) do
Begin
DataBase1.AliasName:=DB.AliasName;
for i:=0 to DB.Params.Count-1 do
DataBase1.Params.Append(Db.Params[i]);
DataBase1.LoginPrompt:=Db.LoginPrompt;
DataBase1.Connected:=True;
ShowModal;
DataBase1.Connected:=False;
free;
End;
DoneDll;
end;

exports
InitDLL index 1,
DoneDLL index 2;
begin

end.

В самой программе я делаю такой вот вызов:
procedure TForm1.Button1Click(Sender: TObject);
var proc:procedure (App:TApplication; Scr: TScreen; Db:TDataBase); StdCall;
handle1:HWND;
begin
try
try
Handle1:= LoadLibrary(PChar("inet.dll"));
@Proc:=GetProcAddress(Handle1, "InitDll");
Proc(Application,Screen,DataBase1);
except
MessageBox(0,"dll not found","DLL",MB_OK+MB_ICONEXCLAMATION);
end;
finally
FreeLibrary(Handle1);
end;
end;

в итоге при вызове Proc(Application,Screen,DataBase1); вызывается exeption AccesViolation.
так как оттрасировать DLL не получается, то я после каждой строки вставил запись в файл номера строки, но файл получился пустой, т.е. вызов функции InitDll происходит но дальше первой строки он не идет.

Помогите, подскажите как правильно вызывать форму в DLL, что ей для этого и как передавать?? и еще, мне надо передать туда TDataBase, мой вариант это что то страшное :) , как правильно сделать передачу этого параметра ???


 
Владислав ©   (2003-11-18 09:03) [1]

Нужно не с указателями работать а с хендлами. И разберись с try...finally. Они у тебя не в порядке.


 
snake1977   (2003-11-18 09:04) [2]

а примерчиком поделиться можно??
как с недлами то работать??


 
alex_***   (2003-11-18 09:32) [3]

когда модальная форма, ничего ей не нужно. Если D7 и сборка без галочки пакетов, можно Application.Handle передавать. И настрой трассировщик, иначе долго будешь копаться в свем коде.


 
alex_***   (2003-11-18 09:34) [4]

кстати зачем передавать TDataBase, если от него только используешь Alias? Работай на переданном DataBase


 
Семен Сорокин ©   (2003-11-18 09:35) [5]

http://delphi.mastak.ru/articles/book/index.html
глава 09


 
VAleksey ©   (2003-11-18 10:21) [6]

поставь
Handle1:= LoadLibrary(PChar("inet.dll"));
до первого try.
И проверь значение Handle1.


 
alex_***   (2003-11-18 11:52) [7]

>>@Proc:=GetProcAddress(Handle1, "InitDll");
и собаку можно убрать перед Proc



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

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

Наверх




Память: 0.48 MB
Время: 0.042 c
11-89805
antonm
2003-03-09 23:41
2003.11.27
ActiveX


4-90169
Hamstel
2003-07-18 17:43
2003.11.27
Запуск програмы от имени другого пользователя


11-89799
Kobik
2003-03-20 20:32
2003.11.27
KOL+DirectX


3-89693
Василиск
2003-11-06 11:27
2003.11.27
Как бороться с сообщениями сервера?


1-89865
Pirate
2003-11-16 09:24
2003.11.27
Client-Server, Socket, Port etc.