Announcement

Collapse
No announcement yet.

DLL aus Verzeichnis laden, das nicht Run-Verzeichnis ist.

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • DLL aus Verzeichnis laden, das nicht Run-Verzeichnis ist.

    Hallo Leidensgenossen,
    <br>
    habe folgendes Problem. Lade eine DLL wie folgt...<br>
    <PRE>
    Result := nil;
    pHandle := LoadLibrary(PChar(speFileName));
    if pHandle <> 0 then
    begin
    @pGetReporter := GetProcAddress(pHandle, 'GetReporter');

    if @pGetReporter <> nil then
    begin
    Result := pGetReporter;
    // Handle merken
    Result.DllHandle := pHandle;
    end
    else
    RaiseLastWin32Error;
    end
    else
    RaiseLastWin32Error;
    </PRE>
    <br>
    Nun liegt aber diese DLL nicht im selben Verzeichnis wie mein EXE-File und die restlichen DLL's. Die Function GetReporter ist in der DLL exportiert und liefert mir ein Objekt von TReporterAbgeleitet. TReporterAbgeleitet ist wiederum eine Klasse die von TReporter abgeleitet ist (Wie der Name schon sagt ). TReporter befindet sich aber in einem anderen Projekt, das mir auch eine andere DLL liefert. <br>
    Jetzt zum eigentlichen Problem... befinden sich beide DLL's im selben Verzeichnis funktioniert der Aufruf prima, d.h. ich kann über das Objekt, das ich von GetReporter bekomme, auf seine Methoden und Funktionen zugreifen. Liegen die beiden DLL's nicht im selben Verzeichnis krieg ich eine Exception vom Typ EAbstractError (Abstrakter Fehler).<br>
    Kann mir jemand helfen????<br>
    Gruß DG

  • #2
    Du lieferst Delphi-Objekte aus einer DLL? Kein gutes Konzept.<br>
    Ist ShareMem in alle Projekte eingebunden?<br>
    Die Ursache ist natuerlich klar. Die erste DLL findet die zweite DLL nicht. Daher laedt bei statischer Bindung auch die erste DLL nicht. Lade daher die zweite DLL in der ersten DLL dynamisch. Dazu muss natuerlich der Pfadname der zweiten DLL bekannt sein

    Comment

    Working...
    X