Dll Exports falsche Namen



  • Hi,

    ich versuche eine DLL mit Hilfe von Visual Studio 2010 in C++ zu erstellen.
    Dabei exportiere ich die Funktionen im Header folgendermaßen:

    #define DLL_EXPORTS
    
    #ifdef DLL_EXPORTS
    #define DLL_API __declspec(dllexport)
    #else
    #define DLL_API __declspec(dllimport)
    #endif
    
    namespace DLL
    {
      class CDLL
      {
      public:
        int DLL_API myDLLFunc1();
        int DLL_API myDLLFunc2();
      private:
      };
    }
    

    Die dazugehörige Cpp:

    namespace DLL
    {
      int CDLL::myDLLFunc1()
      {
        return 0;
      }
      int CDLL::myDLLFunc2()
      {
        return 0;
      }
    }
    

    Prinzipiell sollte ich dann auf diese Funktionen mit anderen Anwendungen über den Namen zugreifen können.
    Zum Testen habe ich mir dei generierte Dll mit dem Tool Dependency Walker mal angeschaut.

    Dort sieht der Export dann so aus:

    ?myDLLFunc1@CDLL@DLL@@QAEHXZ

    Was mache ich falsch?

    mfg



  • Was stimmt denn nicht an diesem Namen? Oder stört dich, dass er "mangled" angezeigt wird? Das kann man im Dependency Walker umschalten, ich glaube der Menüpunkt heißt "Undecorate C++ functions".



  • Du machst nichts falsch. Es ist einfach so.
    Mit extern __declspec kommt dieser "Schrott" raus. Du kannst natürlich auch über den etwas kryptisch anmutendend Namen auf die exportierte Funktion zugreifen, oder du definierst die Exporte in deinem .def File. Sollte im Projekt vorhanden sein und wie dein Projekt heißen "bla.def".

    Sieht dann so aus:

    ; bla.def : Deklariert die Modul-Parameter für die DLL.
    
    LIBRARY      "bla"
    
    EXPORTS
        ; Explizite Exporte können hier eingefügt werden
    	DummyCall
    

    Siehe auch hier:
    http://support.microsoft.com/kb/132044/de
    http://msdn.microsoft.com/en-us/library/a90k134d(VS.80).aspx



  • Hi,

    ich danke vielmals.
    Mit Hilfe der def-Datei funktioniert es super.

    @Bashar
    Ich wollte die Funktionsnamen "sauber" haben, damit sie syntaktisch gleich denen in der Spezifikation sind.

    mfg


Anmelden zum Antworten