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

Вниз

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

 
Donor ©   (2003-07-28 11:44) [0]

Есть Dll и функция в оной, в нее я передаю
(i:integer;k:TIbDataBase;Hwnd:THandle):integer;stdcall;
также в библиотеку добавлена форма и DataModule!
Так вот вопрос- если не делать никаких запросов из таблиц
(DataModule.IBQ.SQL.ADD("select * from DDD"))или вообще не работать с Interbase, то все работает нормольно!, но как только я делаю запрос, то именно при закрытии программы,которая вызывает DLL вылетает ошибка "...access violation..."! В чем проблема подскажите пожалуста!? Заранее спасибо!


 
jack128 ©   (2003-07-28 12:15) [1]

В том что TIBDatabase в DLL"ке и TibDatabase в основной программе - фактически это два разных класса(хоть они и содержут абсолютно одинковый код).
Попробуй скомпилировать DLL и основную программу с Run time пакетами..


 
Victor_Cr ©   (2003-07-28 12:28) [2]


> jack128 © (28.07.03 12:15)

Исходя из всего дело не в этом, т.к. k:TIbDataBase выступает в качестве ссылки на объект.

> Donor © (28.07.03 11:44)

Приведи текст инициализации и освобождения ДЛЛ, а также ту самую пресловутую функцию.


 
Donor ©   (2003-07-28 12:43) [3]

ТЕКСТ ФУНКЦИИ
function Spr(InID,IBDB:Integer; hWnd:THandle):Integer; stdcall;
begin
InitID:=inID;
IBData:=IBDB;
Application.Handle:=hWnd;
try
FormDepartment:=TFormDepartment.Create(Application);
AddFormTV:=TAddFormTV.Create(Application);
if FormDepartment.ShowModal=mrOk then Result:=OutID else Result:=-1;
finally
AddFormTV.Free;
FormDepartment.Free;
end;
end;

exports
Spr;

begin
end.

ТЕКСТ ВЫЗОВА
type
DLLFunc=function(InID,IBDB:Integer; hWnd:THandle):Integer; stdcall;
EDLLLoadError = class(Exception);
var
mainForm: TmainForm;

implementation

{$R *.dfm}

procedure TmainForm.BtnOneClick(Sender: TObject);
var LibHandle:THandle;
ShowDLL:DLLFunc;
R:integer;
begin
LibHandle:=LoadLibrary("departments.dll");
try
if LibHandle=0 then
raise EDLLLoadError.Create("?????????? ????????? ??????????!");
@ShowDLL:=GetProcAddress(LibHandle,"Spr");
if not (@ShowDLL=nil) then
begin
R:=ShowDLL(0,integer(IBD),Application.Handle);
ShowMessage(IntToStr(r));
end
else
RaiseLastWin32Error;
( LibHandle) ТЕКСТ ФУНКЦИИ
function Spr(InID,IBDB:Integer; hWnd:THandle):Integer; stdcall;
begin
InitID:=inID;
IBData:=IBDB;
Application.Handle:=hWnd;
try
FormDepartment:=TFormDepartment.Create(Application);
AddFormTV:=TAddFormTV.Create(Application);
if FormDepartment.ShowModal=mrOk then Result:=OutID else Result:=-1;
finally
AddFormTV.Free;
FormDepartment.Free;
end;
end;

exports
Spr;

begin
end.

ТЕКСТ ВЫЗОВА
type
DLLFunc=function(InID,IBDB:Integer; hWnd:THandle):Integer; stdcall;
EDLLLoadError = class(Exception);
var
mainForm: TmainForm;

implementation

{$R *.dfm}

procedure TmainForm.BtnOneClick(Sender: TObject);
var LibHandle:THandle;
ShowDLL:DLLFunc;
R:integer;
begin
LibHandle:=LoadLibrary("departments.dll");
try
if LibHandle=0 then
raise EDLLLoadError.Create("?????????? ????????? ??????????!");
@ShowDLL:=GetProcAddress(LibHandle,"Spr");
if not (@ShowDLL=nil) then
begin
R:=ShowDLL(0,integer(IBD),Application.Handle);
ShowMessage(IntToStr(r));
end
else
RaiseLastWin32Error;
finally
FreeLibrary(LibHandle);
end;
end;

end.


 
Donor ©   (2003-07-28 12:45) [4]

И еще этот же код под Д5 работает без проблем!


 
Donor ©   (2003-07-28 13:26) [5]

Посоветуйте что делать?


 
jack128 ©   (2003-07-28 14:29) [6]


> Исходя из всего дело не в этом, т.к. k:TIbDataBase выступает
> в качестве ссылки на объект.

В общем ты неправ. Если где то в код есть проверка if k is TibDatabase, то она вернет false..
Но в этом коде нечего такого нету....

> Так вот вопрос- если не делать никаких запросов из таблиц
>
> (DataModule.IBQ.SQL.ADD("select * from DDD"))или вообще
> не работать с Interbase,

А где с базой работаешь, в DLL или в основной программе?
Вообще что ты делаешь с объектом ibdatabase в dll"ке?


 
Donor ©   (2003-07-29 10:13) [7]

Я передаю TIbDataBase в библиотеку для того чтобы подключиться к БД, а дальше работать с Interbase!



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

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

Наверх




Память: 0.48 MB
Время: 0.018 c
6-68437
tytus
2003-06-17 09:48
2003.08.21
Сетевая карта


3-68249
sashag
2003-07-25 17:17
2003.08.21
Interbase DBLookupCombobox


1-68266
sewix
2003-08-08 15:52
2003.08.21
Memo строки разного цвета


14-68460
_Polymorphic_
2003-07-30 10:52
2003.08.21
Девушки-программистки. Миф или реальность?


14-68549
VEG
2003-08-04 20:16
2003.08.21
Оффтопик типа