linker-fehler beim statischen Einbinden einer dll [cbuilder 6]



  • Hi,

    bin grad dabei ein dll-Tutorial zu machen - leider nicht ohne Hürden 😞

    hab aus ner dll mit implib eine lib-Datei erstellt, die ich nun in mein Prog einbinden will.
    Kompilieren geht auch ohne Probleme, nur beim Erstellen sieht es so aus, als kennt Linker die lib-Datei nicht.
    Hab sie dem Projekt hinzugefügt und den Pfad in den Projektoptionen angepasst. Die dll ist auch im Projektverzeichnis.

    Der Linker haut immer diese Fehlermeldungen raus:
    [Linker Fehler] Unresolved external 'TForm1::AddVals(int, int)' referenced from C:\PROGRAMME\BORLAND\CBUILDER6\PROJECTS\UNIT1.OBJ
    [Linker Fehler] Unresolved external 'TForm1::SubVals(int, int)' referenced from C:\PROGRAMME\BORLAND\CBUILDER6\PROJECTS\UNIT1.OBJ

    Bin langsam echt am verzweifeln
    Hoffe mir kann wer helfen

    Gruß aus dem Norden
    Buns


  • Mod

    Hallo

    gabs da nicht mal etwas mit dem "_" _AddVals 😕

    MfG
    Klaus



  • Hallo,
    stimmt, aber man kann mit implib mit der Option -a den führenden Unterstrich
    den Funktionen der dll bzw lib hinzufügen.

    Hab beides probiert: implib mit und ohne "-a". Immer noch die gleichen Linker-Fehler.
    Das Problem liegt wohl an anderer Stelle, denn selbst wenn ich die lib-Datei wieder aus dem Projekt lösche, bekomme ich die gleichen Fehler 😞

    Muß man die lib-Datei noch anders dem Projekt bekanntmachen als sie "nur" hinzuzufügen?

    Gruß
    Buns



  • Ich hatte neulich das Problem, dass ich eine Header-Datei eingebunden hatte, die einige Methoden zwar deklariert hatte, aber deren Implementation nirgends zu finden war. Problematisch war es, weil ich diese (die tatsächlich eingebundene) .h-Datei gar nicht brauchte, ihre Inklusion aber die Deklaration der identisch lautenden Funktionen einer anderen .h-Datei verdeckt hat, so dass die zu dieser (verdeckten) .h-Datei gehörige Implementation nicht gefunden wurde.

    Fazit: Include-Pfade bereinigen... War eine traurig einfache Lösung zu vielen Stunden Kopfzerbrechens. Aber ich hab draus gelernt. 😉

    Viel Glück,

    Oli



  • war auch so ein blöder, zeitraubender Fehler:
    hab den __declspec (dllimport) blöderweise in die public-sektion der Klassendklaration gepasted.
    Muß natürlich ausserhalb stehen 😉

    Danke für die Hilfe

    ...nächste Frage:

    wie würdet ihr diesen Konstruktor...

    class DECLSPEC SWSSLSocket : public SWInetSocket
    {
    public:
    	SWSSLSocket(block_type block=blocking, int keysize=RSA_KEYSIZE);
    	virtual ~SWSSLSocket();
    	...
    

    ...aus einer dll/lib statisch importieren ??

    block_type sieht so aus:

    enum block_type{blocking, noWait, nonblocking};
    

    Ich habs so versucht...

    __declspec (dllimport) SWSSLSocket(block_type, int);
    

    Resultat: Compilerfehler: ")" hinter dem , erwartet ...

    __declspec (dllimport) SWSSLSocket(int, int);
    

    Resultat: Compilerfehler: Deklaration nicht ordnungsgemäß abgeschlossen

    Gruß
    Buns


Anmelden zum Antworten