delphi-dll importieren



  • Hallo zusammen!

    Ich suche jetzt schon ewig im internet aber hab bis jetzt noch keinen brauchbaren Tip gefunden. Mein Problem ist folgendes. Ich hab eine Dll die in Delphi erzeugt wurde. Über eine Funktion exportiert diese eine Klasse:
    Die Definition in der *pas Datei ist folgende:

    TIdentInfo = class(TObject)
      private
        DLLName: string;
        RunOK: boolean;
      public
        procedure setDLLName(name: string);
        function getDLLName(): string;
        procedure setRunOK(wert: boolean);
        function getRunOK(): boolean;
      end;
    
      TInfo = function: TIdentInfo;
    ...
    

    und noch Code aus der *dpr Datei:

    function Identify:TIdentInfo;
    var info:TIdentInfo;
    begin
       info := TIdentInfo.Create;
       info.setDLLName('MYDoc.DLL');
       info.setRunOK(true);
       result:=info;
    end;
    

    Diese möchte ich nun in meinem VS-C++-MFC Programm einbinden. Das Handel auf die Dll und den Funktionenpointer bekomme ich. Allerdings weis ich nicht, wie ich mir die Klasse richtig einlesen kann.

    Mein erster Versuch war die Klasse nachzuprogrammieren:

    class CIdentInfo
    {
    private:
      CString DLLName;
      bool RunOK;
    public:
      void setDLLName(CString name);
      CString getDLLName();
      void setRunOK(bool wert);
      bool getRunOK();
    };
    

    und sie folgendermassen einzubinden

    typedef CIdentInfo (*FunkPoiInfo)();
    ...
    HMODULE DLLHandle = NULL;
    FunkPoiInfo InfoFunktion = NULL;
    
    DLLHandle = LoadLibrary("MYDoc.dll);
    if(DLLHandle == NULL) continue;
    InfoFunktion = (FunkPoiInfo)(GetProcAddress(DLLHandle, "Identify"));
    CIdentInfo t = InfoFunktion();
    

    Allerdings weis ich, dass die Datentypen schon nicht übereinstimmen. Find aber keinen brauchbaren Tipp.

    Kann mir von euch einer da einen kleinen Tip geben wie ich dieses Problem lösen kann?

    Gruß



  • Einen Tipp kann ich dir leider nicht geben, aber da es in der Regel schon nicht möglich ist, reine C++-dlls, die von Compiler A erzeugt worden sind, mit Compiler B zu benutzen, glaube ich nicht an eine einfache Lösung (lasse mich aber gerne eines Besseren belehren). 🙄



  • Ist aber nicht gerade das der Vorteil oder Grund für Dlls, damit andere diese auch benutzen können?



  • Ich weiss nicht viel über Delphi, habe jedoch im Hinterkopf, dass dabei die Delphi DLL's als COM Komponenten erzeugt werden. Falls das korrekt ist kannst Du mittels #import Direktive die DLL und ihre Meta Daten importieren.

    Simon



  • myuser schrieb:

    Ist aber nicht gerade das der Vorteil oder Grund für Dlls, damit andere diese auch benutzen können?

    Jein. Der Vorteil von DLLs ist, dass sie von mehreren Programmen benutzt werden können und erst bei Bedarf geladen werden müssen. Um von Programmen benutzt werden zu können, die in verschiedenen Sprachen geschrieben werden, müssen sie außerdem noch ein Plattform/Sprachunabhängiges Interface haben. Das gilt meines Wissens weder für C++-DLLs, noch für Delphi-DLLs. Es gilt allerdings für C-DLLs, und es ist afaik möglich, sowohl in Delphi als auch in C++ DLLs mit C-Interface sowohl zu benutzen als auch zu erzeugen.



  • Heißt das, dass wenn ich keine Möglichkeit habe die Delphi-DLL so zu ändern, dass sie ein C-Interface hat, ich auch keine Möglichkeit habe diese in meinem C++-Programm zu verwenden?


Anmelden zum Antworten