Announcement

Collapse
No announcement yet.

Microsoft-DLLs in Borland-Brojekte einbinden

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

  • Microsoft-DLLs in Borland-Brojekte einbinden

    Hallo, <br>
    <br>
    Ich möchte eine unter Visual C erstellte DLL in ein Borland-Projekt (CBuilder4) einbinden. <br>
    <br>
    Wie muß man die Funktionen dieser DLL in Visual C beim Erstellen deklarieren u.s.w.? <br>
    Welche speziellen Compiler-Einstellungen muß man machen? <br>
    <br>
    Was muß ich unter Borland tun, damit ich diese DLL einbinden kann? (z.B. IMPLIB-Optionen) <br>

    Vielen Dank im Voraus. <br>
    MFG JB

  • #2
    In der Header muß du die Funktionen folgendermaßen deklarieren :
    Hier nur als Beispiel !

    <p><pre>
    #ifdef __cplusplus
    extern "C" {
    #endif

    BOOL __declspec (dllexport) DoImport(HWND hwnd,const char * lpDatabasename,const char *lpDataPath ) ;

    #ifdef __cplusplus
    };
    #endif

    <p></pre>

    In der Def Datei solltest du die Funktionen mit entsprechender Nummer eintragen.

    Implib über die neu erstellte DLL laufen lassen.
    Lib in das Builder Project einbinden und Header Datei includen.
    Das wars

    Comment


    • #3
      Ich hatte ein Problem mit der Einbindung einer DLL, die unter MS Visual C erstellt wurde. <br>
      Vielen Dank an alle, die mir geantwortet haben. <br>
      Dieses Problem resultierte einfach nur daraus, daß der DLL-Programmierer seine Export-Funktionen nicht wie vereinbart mit 'extern "C"' modifiziert hatte. <br>

      Nun noch ein paar Informationen über DLLs und deren Einbindung in Projekte, für diejenigen, die auch Hilfe unter diesem Diskussionspunkt suchen: <br>

      Exportierbare Funktionen in DLL so deklarieren: <br>
      __declspec(dllexport) Typ Fkt (Parameter) <br>
      Dieser Funktionsname wird vom C++Compiler dekodiert und kann von anderen Programmiersprachen nicht erkannt werden. <br>
      Deshalb den Modifizierer 'extern "C"' verwenden um undekodierte Funktionsnamen zu erhalten: <br>
      extern "C" __declspec(dllexport) Typ Fkt (Parameter) <br>

      Es gibt Bindung der Funktionen via Ordnungszahlen (alt); von MFC verwendet: - erzeugt Funktionsaufrufe wie: <br>
      ?speaker@@YGHGEEPAD@Z @1 <- Ordnungszahl <br>
      Und Bindung via Symbol (neu); von Borland verwendet: - erzeugt Funktionsaufrufe wie: <br>
      speaker @1 <br>
      Wird die Funktion im Quelltext mit 'extern "C"' gekennzeichnet, erhält man diesen Funktionsaufruf. <br>

      Um die DLL nun in ein Projekt einbinden zu können benötigt man die dazugehörende LIB-Datei und die Header-Datei mit den Funktions-Deklarationen, die dann etwa so aussehen: <br>
      extern "C" __declspec(dllimport) Typ Fkt(Parameter);<br>
      Die Header-Datei includet man in den CPP-Dateien, in denen man die DLL-Funktionen wie ganz normale Funktionen aufruft. <br>

      Das folgende Beispiel zeigt wie man die LIB-Datei "zu Fuß" erzeugt: <br>

      MSQuell.dll in BIN-Verzeichnis kopieren; <br>
      "implib BCZiel.lib MSQuell.dll" ausführen (z. B. im DOS-Eingabefenster) <br>
      oder<br>
      "impdef BCZiel.def MSQuell.dll" und dann <br>
      "implib BCZiel.lib BCZiel.def" <br>

      Diese LIB-Datei fügt man nun in sein Projekt ein. <br>

      Ergänzung: <br>
      LIB-Datei für MS-Projekte erzeugen: <br>
      BCQuell.dll in BIN-Verzeichnis kopieren; <br>
      "implib -a MSZiel.lib BCQuell.dll" ausführen <br>
      (Der Parameter wird nur von neueren implib.exe-Programmen angeboten) <br>

      MFG J

      Comment

      Working...
      X