![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
D7 и IB6.5 в DLL [D7, IB6.x]
AlexandrPV © (2004-07-22 15:09:00)Кто ме объяснит проблему. У меня есть основная программа в которой находится подключение к базе, а в DLL написаны формы и запросы, так вот когда я использую одновремено две DLL, то происходит ошибка, что-то вроде переобъявления курсора.
Desdechado (2004-07-24 20:29:00) [1]1. Не вижу объявления переменных IBQuery1 и Trans. Они локальные, глобальные или свойства формы?
2. Я так и не понял - формы в ОДНОЙ ДЛЛ или в разных?
3. В другой форме SQL-текст такой же?
4. Destroy вызывать напрямую - дурной тон, читай доку.
AlexandrPV (2004-07-23 12:15:00) [2]Ошибка "Dynamic SQL Error|SQL error code = -502|Declared cursor alredy exists."
Смысл в том, что если грузить библиотеки не вместе, то ошибки нет.
В главной програме я подключаю библиотеку следующим образом:
Инициализация:
HandleWares:=LoadLibrary('WFReestrWares.dll');
if HandleWares<>0 then
begin
@FGet:=GetProcAddress(HandleWares,'GetInterface');
Wares:=FGet(Application);
if Wares<>nil then Wares.Base:=IBDatabase1;
end;
Показ формы:
Wares.Show;
Так же и другая форма вызывается.
В библиотеке:
function GetInterface(App:TApplication):TFormWares;
begin
if not Assigned(DLLApp) then
begin
DLLApp:=Application;
end;
Application:=App;
Result:=TFormWares.Create(App);
end;
procedure TFormWares.FormShow(Sender: TObject);
begin
IBQuery1:=TIBQuery.Create(Self);
IBQuery1.SQL.Append('select * from wares');
IBQuery1.Database:=FBase;
Trans:=TIBTransaction.Create(Self);
Trans.AddDatabase(FBase);
IBQuery1.Transaction:=Trans;
Trans.StartTransaction;
IBQuery1.Open;
end;
procedure TFormScale.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if Trans.Active then Trans.Commit;
IBQuery1.Destroy;
Trans.Destroy;
end;
procedure MyDLLProc(Reason:integer);
begin
if Reason = DLL_PROCESS_DETACH then
if Assigned(DLLApp) then Application:=DLLApp;
end;
begin
DLLProc:=@MyDLLProc;
end.
Вот вобщем и все.
Desdechado (2004-07-22 19:04:00) [3]а ты не хочешь хотя бы показать, как ты вызываешь DLL, что передаешь в нее
и расскажи, что ты понимаешь под курсором, и какая ошибка - полный текст, а не твои догадки о ней