![]() |
Datenbank: IB/FB • Zugriff über: 1
IB_Connection Pointer
hallo leute!
ich habe eine IB_Connection die ich auch in einer DLL nutzen möchte. nun gibt es die verschiedensten wege...three tier zB - das wäre für mich aber eine der ungünstigsten lösungen die ich nur überhaupt haben kann. genauso will ich nicht in der DLL eine extra connection zur DB eröffnen... ich habe mir also gedacht: geh ich halt über einen pointer der connection. doch das ganze will nicht so wie ich es will...denn der untyped pointer kann nicht in eine IB_Connection dereferenziert werden :( für die connection gibt es: //in der EXE: dbpointer:^TIB_Connection .../... dbpointer:=@IBconnection; .../... //in der DLL (proc übergibt pointer) dllIBconnection:=dbpointer^; hat jemand eine bessere idee?! es gibt bei der IB_Connection noch ne dbHandle, weiß aber nicht ob die mir was bringt.... herzliche grüße! dirk |
Re: IB_Connection Pointer
Hallo!
Sehe ich das richtig, dass Du die ibobjects verwendest? Dann geht das eigentlich ganz einfach: - in der DLL eine eigene TIB_Connection einfügen - eine Initialisierung bauen, in der das dbhandle der TIB_Connection des Haupotprogramms an die DLL übergeben wird, dann der Property dbHandleShared der TIB_Connection in der DLL dieses Handle zuweisen. Jason hat dazu auch eine Anleitung veröffentlicht: Zitat:
Hope it helps onlinekater |
Re: IB_Connection Pointer
danke für den tipp, der weg is verständlich nur treten bei mir kleinere probs auf:
in der EXE treten probleme (EAccessViolation) mit dem dbcon.dbhandle auf. dh ich kann das dbhandle explizit nicht ansprechen (obowhl die verbindung korrekt steht [dbcon.connect]). nutze ich hingegen @ibconnection und übergebe das ganze an die dll funktioniert es erstma bis zur zuweisung: dll_ibo_con.dbhandleshared:= p_ibocon; frage also: kann ich die property dbhandle erst mit einem gewissen constraint aufrufen? session vorher starten oder sowas?!... |
Re: IB_Connection Pointer
Zeig doch mal Deinen Code, dann schau ich gerne mal drüber
Gruß onlinekater PS: ggf. kann ich Dir mal einen Beispielcode basteln |
Re: IB_Connection Pointer
folgenden code enthält die exe (Datenmodul ANUcon zur verbindungserstellung):
Delphi-Quellcode:
unit ANUcon;
interface uses SysUtils,Dialogs, Classes, IB_Components; type Tdbcon = class(TDataModule) dbconnection: TIB_Connection; procedure DataModuleCreate(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var dbcon: Tdbcon; globaldbpointer:Pointer; implementation {$R *.dfm} procedure Tdbcon.DataModuleCreate(Sender: TObject); begin try dbconnection.Username:='SYSDBA'; dbconnection.Password:='masterkey'; dbconnection.connect; except MessageDlg(blablabla); end; ANUcon.globaldbpointer := ANUcon.dbcon.dbconnection.dbHandle; //hier liegt mein problem: ich bekomme kein verwertbaren rückgabewert, es entsteht an ieser stelle // immer wieder ein accessviolation error bzw zugriffsverletzung, warum auch immer. //wenn nich dahin aber @ANUcon.dbcon.dbconnection verwende hab ich den pointer den ich wollte... //nur den wiederum frisst die dll_con.dbhandleshared nicht. end; ___________________ ___________________ diese funktion der DLL soll die verbindung der exe aufgreifen und benutzen:
Delphi-Quellcode:
[edit=Phoenix][ Delphi ]-Tags eingefügt. Bitte das Nächste mal selber dran denken. Mfg, Phoenix[/edit]
library equip;
uses ShareMem, ExceptionLog,Types,Controls,Windows,{ExtCtrls,}Forms, SysUtils, Classes, DM_Eq in 'DM_Eq.pas' {DMEq: TDataModule}, FRM_EQ in 'FRM_EQ.pas' {frmEq}, TH_Consts in 'D:\soft\all\TH_Consts.pas'; {$R *.res} var DLLForm : TfrmEq; DLLApplication : TApplication; function showdllform(pApplication:TApplication;pPanel:TWinControl;pHeight,pWidth:Integer;p_dbpointer:Pointer):HWND; begin if not assigned(DLLApplication) then DLLApplication := Application; Application := pApplication; try frmeq.dbconnection.dbHandleShared:=p_dbpointer; except MessageBox(blabla); end; if not assigned(DLLForm) then DLLForm := Tfrmeq.CreateParented(pPanel.Handle); with DLLForm do begin BorderStyle:= bsnone; Height := pHeight; Width:=pWidth; top:=0; show; end; result:= DLLForm.Handle; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:15 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz