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