ich möchte in einer DLL eine Databaseverbindung nutzen, die in meinem Hauptprogramm bereits existiert. Das DataBase Objekt sowie das Session Objekt liegen in einem separaten Datenmodul. Ich übergebe jetzt das Datenmodul als Pointer an die DLL. Innerhalb der DLL habe ich eine Query die ich mit dem Database Objekt und der Session verbinden möchte. Leider erhalte ich innerhalb der DDL immer eine Fehlermeldung über eine Zugriffsverletzung, das die Session ungekannt ist. Anbei ein Codeauszug:
Aufruf der DLL durch einen Button in Hauptprogramm: <BR>
<BR>
procedure TForm1.Button1Click(Sender: TObject);<BR>
var b,s : Pointer;<BR>
begin <BR>
b := @DM_LoginMain.DataBaseEcovivon; <BR>
s := @DM_LoginMain.SDSessionEcovision; <BR>
start2_dll(b,s); <BR>
end; <BR>
<BR>
procedure start2.dll(b,s : Pointer); <BR>
type <BR>
Tpa = procedure(b,s : Pointer); <BR>
var <BR>
pa : Tpa; <BR>
Handle : THandle; <BR>
begin <BR>
Handle := LoadLibrary('Verzeichnis'); <BR>
if Handle <> 0 then begin <BR>
if @pa <> nil then begin <BR>
pa(b,s); <BR>
end; <BR>
FreeLibrary(Handle); <BR>
end; <BR>
end; <BR>
<BR>
Procedure in Dll :<BR>
procedure start2(b,s : Pointer); <BR>
var <BR>
newQuery : TSDQuery; <BR>
begin <BR>
newQuery := TSDQuery.Create(nil); <BR>
newQuery.DataBaseName := TSDDataBase(b^).DataBaseName; <BR>
newQuery.SessionName := TSDSession(s^).SessionName; <BR>
newQuery.SQL.Clear; <BR>
newQuery.SQL.Add('SELECT * FROM TABLENAME'); <BR>
newQuery.Prepare; <BR>
newQuery.Open; <BR>
end; <BR>
In der Zeile newQuery.Prepare bleibt wird mit einer Fehlermeldung die DLL abgebrochen : Exception der Klasse EDatabaseError. 'Invalid Session name S_Ecovision. <BR>
<BR>
Der Sessionname ist der korrekte. Wer kann mir diesbezüglich einen Hinweis geben was ich falsch mache!?
Gruß Frank
Comment