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?