Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
8-68412
Romeo5
2003-04-24 01:42
2003.08.21
Рисование Form.Canvas без использования OnPain


1-68344
den74
2003-08-08 15:05
2003.08.21
функция FindNext


1-68356
Pavel11
2003-08-08 10:46
2003.08.21
RichEdit


14-68482
VEG
2003-08-04 19:33
2003.08.21
Издевательства над винчестером


3-68160
VID
2003-07-29 13:29
2003.08.21
TpFIBQuery, запись данных из потока в параметр Insert-запроса





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский