Einzelnen Beitrag anzeigen

gmc616

Registriert seit: 25. Jun 2004
Ort: Jena
627 Beiträge
 
Delphi 10.3 Rio
 
#1

In Service-Anwendung dynamisch DLL laden

  Alt 27. Feb 2008, 12:23
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
  Mit Zitat antworten Zitat