dll Problem, Hilfe .....



  • Hallo,
    habe folgenden Code.
    Unit3.h

    #ifndef Unit3H
    #define Unit3H
    //---------------------------------------------------------------------------
    #include <Classes.hpp>
    #include <Controls.hpp>
    #include <StdCtrls.hpp>
    #include <Forms.hpp>
    //---------------------------------------------------------------------------
    class TForm3 : public TForm
    {
    __published:	// Von der IDE verwaltete Komponenten
    	TLabel *Label1;
    	TListBox *ListBox1;
    private:	// Benutzer-Deklarationen
    public:		// Benutzer-Deklarationen
    	__fastcall TForm3(TComponent* Owner);
    };
    //---------------------------------------------------------------------------
    extern PACKAGE TForm3 *Form3;
    //---------------------------------------------------------------------------
    __declspec(dllexport) AnsiString VarVersion(AnsiString);
    #endif
    

    Unit3.cpp

    AnsiString Var;
     AnsiString tt;
     tt = VarVersion(Var);
     ListBox1->Items->Add(tt);
    

    dll.cpp

    .....
    #pragma argsused
    int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
    {
    	return 1;
    }
    //---------------------------------------------------------------------------
    
    AnsiString VarVersion(AnsiString x)
    {
    	x = "0.0";
    	return x;
    }
    

    Dann kommt die Meldung immer:

    [Linker Fehler] Error: Ungelöste externe 'VarVersion(System::AnsiString)' referenziert von F:\...\DEBUG_BUILD\UNIT3.OBJ
    

    Könnt ihr mir Bitte helfen, weiss nicht weiter und weiss nicht wo der Fehler ist
    und wo ich suchen soll.
    Dank im Voraus.



  • Hallo

    Der Modifizierer dllexport muß bereits in der DLL mit angegeben werden.
    Hier findest du ein genaue Anleitung.

    bis bald
    akari



  • Habe das so probiert wenn ich es richtig verstanden habe:
    dll.cpp

    __declspec (dllexport) AnsiString VarVersion(AnsiString x)
    

    Und das hat leider nicht funktioniert.



  • Du solltest zwischen dllexport (in der DLL) und dllimport (in der Anwendung) unterscheiden. Zudem muß die mit der DLL erstellte .LIB-Datei zum Anwendungsprojekt hinzugefügt werden.

    Wenn du außerdem AnsiStrings zwischen DLL und Anwendung austauschst, mußt du, da AnsiString mit Referenzzählung arbeitet, den Memory-Manager als DLL einbinden (wenn du ein leeres DLL-Projekt erstellst, erscheint in den Quellcodekommentaren ein entsprechender und detaillierter Hinweis).


Anmelden zum Antworten