Hallo!
Ich würde gern aus einer DLL heraus eine Verbindung zu einem local Server aufbauen. Ich erzeuge also die Instanz der Klasse und führe einige Operationen durch. Dies schreibe ich nun in eine Prozedur (in der DLL) und rufe diese Prozedur aus einer Anwendung heraus auf (also binde die DLL ein und rufe dann diese Prozedur, welche die Verbindung zum Local Sevrer herstellt und Daten sendet, auf) -> alles funktioniert wunderbar. Ich brauche dies allerdings so, dass die Verbindung zum Local-Server aufgebaut wird, wenn die DLL geladen wird, also habe ich versucht die prozedur, welche das managt, direkt im begin..end-Teil meiner DLL aufzurufen mit einem negativen Ergebnis: Es kommt keine Verbindung zustande! Ich versuche also eine Verbindung zu einem LocalServer aus einer DLL heraus zu deren "Einbindzeit" herzustellen.
Binde ich diese DLL, welche die Verbindung zur Einbindzeit herstellen sollte, in ein Programm statisch ein (also so dass die DLL beim starten des Programms in den Addressraum geladne wird), so erhalte ich eine Access Violation. Binde ich die DLL dynamisch über LoadLibrary ein, so "hängt" die DLL beim Aufruf von "DLL := CoDLL.Create" (DLL ist vom Typ IDLL und CoDLL ist die zugehörige CoClass).
Kann mir jemand helfen?
Hier einmal der Code meiner Test-DLL:
<PRE>library SaintSecureTestDLL;
uses
SysUtils,
Classes,
SaintSecureServer_TLB in '..\SaintSecureServer_TLB.pas'; // die TLB, in der IDLL deklariert ist
{$R *.res}
function StartTest: Word; stdcall;
var
DLL : IDLL;
wLogLevel,
wID : Word;
bDecryptOnCopy : byte;
begin
DLL := CoDLL.Create;
wID := DLL.Login('TESTDLL', wLogLevel, bDecryptOnCopy);
DLL.Log(wID, $FFFF, 'Testmessage');
DLL.Logout(wID);
DLL := nil;
end;
exports StartTest;
begin
// StartTest; // <- wenn ich hier einkommentiere, bekomme ich zur Einbindzeit KEINE Verbindung, sondern mein Programm (welches die DLL eingebunden hat) hängt
end.
</PRE>
MfG
Bastian Glöckle
Ich würde gern aus einer DLL heraus eine Verbindung zu einem local Server aufbauen. Ich erzeuge also die Instanz der Klasse und führe einige Operationen durch. Dies schreibe ich nun in eine Prozedur (in der DLL) und rufe diese Prozedur aus einer Anwendung heraus auf (also binde die DLL ein und rufe dann diese Prozedur, welche die Verbindung zum Local Sevrer herstellt und Daten sendet, auf) -> alles funktioniert wunderbar. Ich brauche dies allerdings so, dass die Verbindung zum Local-Server aufgebaut wird, wenn die DLL geladen wird, also habe ich versucht die prozedur, welche das managt, direkt im begin..end-Teil meiner DLL aufzurufen mit einem negativen Ergebnis: Es kommt keine Verbindung zustande! Ich versuche also eine Verbindung zu einem LocalServer aus einer DLL heraus zu deren "Einbindzeit" herzustellen.
Binde ich diese DLL, welche die Verbindung zur Einbindzeit herstellen sollte, in ein Programm statisch ein (also so dass die DLL beim starten des Programms in den Addressraum geladne wird), so erhalte ich eine Access Violation. Binde ich die DLL dynamisch über LoadLibrary ein, so "hängt" die DLL beim Aufruf von "DLL := CoDLL.Create" (DLL ist vom Typ IDLL und CoDLL ist die zugehörige CoClass).
Kann mir jemand helfen?
Hier einmal der Code meiner Test-DLL:
<PRE>library SaintSecureTestDLL;
uses
SysUtils,
Classes,
SaintSecureServer_TLB in '..\SaintSecureServer_TLB.pas'; // die TLB, in der IDLL deklariert ist
{$R *.res}
function StartTest: Word; stdcall;
var
DLL : IDLL;
wLogLevel,
wID : Word;
bDecryptOnCopy : byte;
begin
DLL := CoDLL.Create;
wID := DLL.Login('TESTDLL', wLogLevel, bDecryptOnCopy);
DLL.Log(wID, $FFFF, 'Testmessage');
DLL.Logout(wID);
DLL := nil;
end;
exports StartTest;
begin
// StartTest; // <- wenn ich hier einkommentiere, bekomme ich zur Einbindzeit KEINE Verbindung, sondern mein Programm (welches die DLL eingebunden hat) hängt
end.
</PRE>
MfG
Bastian Glöckle
Comment