Hi ^^
ich habe hier ein Problem mit dem Aufruf von Funktionen einer Delphi-
DLL (Kein
ActiveX, verwendet wird Delphi 7 für Windows). Der Zugriff auf die
Dll erfolgt genau so wie ich es bei C++-DLLs mache:
Code:
[DllImport("MyDll.dll", EntryPoint = "openDB", CallingConvention = CallingConvention.StdCall)]
private static extern void _OpenDB();
Der Aufruf von
openDB sorgt dafür, dass innerhalb der
DLL eine Datenbankverbindung initialisiert wird. Verwendet wird diese dann jeweils über
Query-Funktionen:
Code:
[DllImport("MyDll.dll", EntryPoint = "queryX", CallingConvention = CallingConvention.StdCall)]
public static extern string _QueryX(Char[] val);
Nun zum eigentlichen Problem: Die Datenbankverbindung wird in einem eigenen Thread erstellt. Der Aufruf einer
Query*-Funktion erfolgt jeweils aus einem eigenen Thread heraus. Bei diesen Aufruf bleibt der Thread der C#-Anwendung offenbar stehen. Nach dem Aufruf des Einsprungspunktes der
DLL sollte sofort eine Debugging-Meldung ausgegeben werden, was nicht der Fall ist. Zu dem Zeitpunkt erfolgt also noch gar kein Zugriff auf die Datenbankobjekte.
Bei C++-DLLs ist sowas kein Problem. Leider bin ich kein erfahrener Delphi-Programmierer und würde gerne wissen, ob sich Delphi hier irgendwie anders verhält. (Alle Funktionen wurden mit einem
stdcall; versehen und mit
extern auch exportiert)