Einzelnen Beitrag anzeigen

Dunedain
(Gast)

n/a Beiträge
 
#1

[CPP] Dynamisches Laden einer Klasse aus einer DLL

  Alt 17. Dez 2006, 20:18
Hallo,

ich habe, wie der Titel schon sagt, einige Probleme damit, aus einer von mir erstellten DLL eine Klasse zu exportieren. Das DLL Projekt lässt sich fehlerfrei kompilieren, jedoch das einbinden der DLL funktioniert leider nur statisch.

Nehmen wir mal dieses Beispiel (Die Datei ist Bestandteil des DLL Projektes):
Code:
#ifdef __DLL__
#   define DLL_EXP __declspec(dllexport)
#else
#   define DLL_EXP __declspec(dllimport)
#endif
//---------------------------------------------------------------------------
#ifndef Unit2H
#define Unit2H
//---------------------------------------------------------------------------
#include <Classes.hpp>
//---------------------------------------------------------------------------
class DLL_EXP TTest : public TThread
{
private:
protected:
        void __fastcall Execute();
public:
        __fastcall TTest(bool CreateSuspended);
};
//---------------------------------------------------------------------------
#endif
Wie schon erwähnt, lässt sich das Projekt kompilieren und spuckt danach, korrekter Weise eine .dll sowie eine .lib Datei aus. Da ich das ganze dynamisch laden will, kopiere ich den Header der Klasse sowie die dll selbst in das Programm Verzeichnis, welches die DLL verwenden soll. So weit, so gut:
Ich binde also den Header der Klasse in das Formular ein, und versuche die DLL bzw. die Klasse aus der DLL bei einem Button-Press zu laden:
Code:

void __fastcall TformularMain::buttonClick(TObject *Sender)
{

    HINSTANCE lib = NULL;

    try
    {

        /* Bibliothek anfordern */
        lib = LoadLibrary( "TTest.dll" );

        /* Prüfen, ob die Bibliothek geladen werden konnte */
        if( lib )
        {

            TTest *c = NULL;

            try
            {

                /* Wenn diese Zeile auskommentiert wird, lässt es sich das Programm kompilieren
                 **/
                c = new TTest ( true );

            }
            __finally
            {

                delete c;
                c = NULL;

            }

        }
       
    }
    __finally
    {

        FreeLibrary( lib );

    }
}
Leider bekomme ich dann beim Versuch, das ganze zu kompilieren, zwei Fehlermeldungen
"Unresolved External TTest:: referenced from ..."
"Unresolved External __fastcall TTest::TTest( bool ) referenced from ..."

Wenn ich aber die .lib Datei in mein Projekt einbinde, das ganze also statisch linke, funzt alles...

Hat jemand ne Idee, wo mein Fehler liegen könnte?
  Mit Zitat antworten Zitat