AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein [CPP] Dynamisches Laden einer Klasse aus einer DLL
Thema durchsuchen
Ansicht
Themen-Optionen

[CPP] Dynamisches Laden einer Klasse aus einer DLL

Ein Thema von Dunedain · begonnen am 17. Dez 2006 · letzter Beitrag vom 19. Dez 2006
 
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
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz