Форум: "Основная";
Текущий архив: 2003.11.27;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c