Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
3-89783
Chel
2003-11-10 17:41
2003.11.27
NCOCI


3-89754
Liavik
2003-11-08 00:30
2003.11.27
Отчет


1-89960
Ben
2003-11-17 17:51
2003.11.27
Есть ли у объекта определённое свойство?


3-89698
GIL
2003-11-06 11:05
2003.11.27
Filtered по второму разу глючит


1-89883
Гег
2003-11-15 19:04
2003.11.27
Присвоение всяких данных





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский