DLL (aus C-code compiliert) in C++ .NET verwenden



  • Hallo,

    Ich habe eine DLL mit C-Code erstellt. Diese enthält mehrere Funktionen wie z.B.:

    void testprint()
    {
      printf("Dies ist ein Test\n");
    }
    

    Diese Funktionen habe ich mit

    __declspec( dllexport ) void testprint();
    

    exportiert und mit

    extern __declspec( dllimport )void testprint();
    

    in einem anderen C-Projekt wieder importiert.
    Das hat so weit alles funktioniert.

    Nun will ich diese DLL in einem C++ .NET Projekt verwenden. Wie kann ich solch eine DLL einbinden? Was muss in Bezug auf managed und unmanaged Code beachten?

    Danke schon mal Voraus!



  • philosoph schrieb:

    Was muss in Bezug auf managed und unmanaged Code beachten?

    Nichts. Du importierst genau so, wie du es auch sonst machen würdest.



  • Danke. Naja irgendwas muss ich sicher beachten, weil irgendwie geht's so nicht.

    Bei meiner Realisation in C hab ich eine .lib zu dem Projekt hinzugefügt, in welchem ich die DLL verwenden wollte. Wenn ich das nun bei meinem .Net Projekt mache, bekomme ich gleich eine Fehlermeldung es gäbe keine Regel, wie eine .lib zu verarbeiten ist.
    Füge die .lib nicht hinzu bekomme ich folgendes:

    1.) Importiere ich die Funktion, verwende sie aber nicht -> keine Fehler
    2.) Verwende ich die Funktion auch, bekomme einen Linkerfehler LNK2028: unresolved token und LNK2019: unresolved external symbol

    hab ich vielleicht irgendwas nicht beachtet?



  • LIBs binde ich immer so ein...

    #pragma comment(lib, "nameder.lib")
    

    Und bei mir geht das Problemlos (so lange die LIbs entweder KEINE CRT referenzieren oder *genau die gleiche* wie die EXE/DLL (also auch mit /clr übersetzt!).



  • Danke. Leider geht's immer noch nicht.

    Das .Net - Projekt habe ich mit /clr übersetzt - wenn ich es ohne versuche, gibt's über 250 Fehler.

    Die DLL habe ich ohne /clr übersetzt - wenn ich es mit versuche, bekomme ich diesen Fehler:

    Command line error D8045 : cannot compile C file with the /clr option



  • Versuch mal folgendes:

    Projekt -> Eigenschaften -> Konfigurationseigenschaften -> Linker -> Eingabe und dann rechts unter "Zusätzliche Abhängigkeiten" deine .lib-Datei eintragen.



  • Geht leider auch nicht - immer noch der gleiche Linker-Fehler.


Anmelden zum Antworten