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.OBJBin langsam echt am verzweifeln
Hoffe mir kann wer helfenGruß aus dem Norden
Buns
-
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