Klassen in dll exporieren und in andere dll nutzen



  • Unter Win32 mach ich folgendes:

    #ifdef DLL_CLASS_EXPORT
    #define MY_EXPORT __declspec(dllexport) 
    #else
    #define MY_EXPORT __declspec(dllimport)
    #endif
    
    class MY_EXPORT SomeClass
    {
      // ...
    };
    

    wodurch die Klasse SomeClass exportiert wird...
    jetzt linke ich die Lib an eine andere dll (COM-dll um genau zu sein)und include auch das h-File und linke die lib von SomeClass...

    kann ich jetzt in der zweiten dll folgendes sagen

    SomeClass* psc = new SomeClass();
    // ...
    delete psc;
    

    ohne das ich (MemoryManger bzw. sonstige)Probleme bekommen kann?

    [ Dieser Beitrag wurde am 16.04.2003 um 01:47 Uhr von esskar editiert. ]



  • dll hört sich nach winapi an, thread verschoben ins winapi forum WinAPI



  • oder muss ich vielleicht sowas machen:

    class MY_EXPORT SomeClass
    {
      public:
         SomeClass() {}
         ~SomeClass() {}
    
         static SomeClass* Construct() { return new SomeClass(); }
         static void Destruct(SomeClass* psc) { if(psc) delete psc; }
    };
    

    und dann in der COM-DLL

    SomeClass* psc = SomeClass::Construct();
    //..
    SomeClass::Destruct(psc);
    

    aufrufen

    PS: Was ich noch erwähnen sollte: die DLL, deren Klasse ich exportiere, compiliere ich mit VS 6! Die COM Dll jedoch mit VS .NET!

    [ Dieser Beitrag wurde am 16.04.2003 um 01:34 Uhr von esskar editiert. ]



  • Kann mir keiner helfen?



  • P.S.
    1. Zwischen Deinem Beitrag1 und Beitrag2 besteht kein Unterschied!
    2. Da die komplette Klasse exportiert wird und somit sizeof(class) bekannt ist, funzt das new. Nur wenn sizeof(class) nicht bekannt wäre, bräuchtest Du einen Object-Creator oder wie COM so schön dazu sagt, eine ClassFactory!

    Übrigens ist es egal, wo Deine DLL importiert wird, Hauptsache der Linker kann die Export-Tabelle der DLL lesen, was nur bei MSVC der Fall sein dürfte.



  • viellciht gehts ja so.....

    #define EXPORT __declspec(dllexport);
    #define CALL   _cdecl
    
    BEISPIEL:
    EXPORT void CALL Test() { }
    

    So mache ich es halt... ohne dllimport:
    z.b. in einer Applikation:

    void (*Test)();
    HMODULE dll = "Test.dll"
    Test = (void(_cdecl))()GetProcAddress(dll, "Test");
    

Anmelden zum Antworten