Hallo
DP,
irgendwie stehe ich auf dem Schlauch.
Ich versuche eine Service-Anwendung zu schreiben, die dynamisch eine
DLL lädt.
Frage 1: Das sollte doch funktionieren, oder?
hierfür habe ich mir eine Klasse gebastelt:
Delphi-Quellcode:
type
TFN_fInit =
function (ADocID : integer) : boolean;
Stdcall;
TDynDll =
Class (TObject)
private
FDllHandle : Integer;
Finit : TFN_fInit;
public
Constructor Create (ADllFilePath :
string);
end;
[...]
constructor TDynDll.Create(ADllFilePath:
string);
var
bErr : boolean;
begin
bErr := false;
if FileExists (ADllFilePath)
then
begin
FDllHandle := loadLibrary(pchar(ADllFilePath));
if FDllHandle <> 0
then
begin
FInit := GetProcAddress(FDllHandle,'
fInit');
// <-- hier knallts in DLL laut Debugger
end
else
bErr := true;
end else
bErr := true;
// <-- Hier laut EurekaLog
end;
Nutze ich diese Klasse um meine
Dll zu laden in einer normalen
Win32-Anwendung, funktioniert es wunderbar.
Benutze ich diese Klasse in meiner Service-Anwendung, knallts es mit einer
AV auf der Zeile
FInit := GetProcAddress(FDllHandle,'fInit'); laut Debugger.
Eurekalog gibt mir allerdings die letze Codezeile vom
TDynDll.Create als Fehlerstelle an. Das finde ich eigenartig.
Frage 2: Gibts es irgend etwas zu beachten beim dynamischen laden von DLLs in Service-Anwendungen?
Ich nutze die für die Service-Anwendung die TService-Klasse aus SvcMgr.pas, die mir die Delphi7-
IDE anbietet.
Das ganze soll als Interaktiver Dienst laufen im Lokalen Systemaccount.
In der
DLL wird ein
ActiveX geladen, aber erst wenn ich es rufe.
Hab ich was übersehen oder vergessen oder überlesen?
Grüße
gmc