VC++ DLL in Borland einbinden
-
ich habe eine *.Lib datei zu meiner DLL. Jetzt möchte ich diese einbinden. Ich füge einfach die Lib datei dem Projekt hinzu und binde das header File ein.
Jetzt erhalte ich folgende Fehlermeldung beim Linken:
[Linker Fehler] '*.LIB' contains invalid OMF record, type 0x21 (possibly COFF)
Die DLL wurde mit Visual Studio geschrieben.
Hat jemand eine Idee wie man diesen Fehler beheben kann?
MfG
-
Hallo
Such hier im Forum nach *omf*
bis bald
akari
-
Danke erstmal hab der DLL jetzt mit implib eine neue lib verpasst und er bringt mir jetzt keinen Fehler mehr das er mit der DLL nicht zurecht kommt.
Nur kommt jetzt der Fehler beim Aufruf einer Funktion:
[Linker Fehler] Unresolved external 'Funktion(wchar_t *)' referenced from *.OBJ
das heißt er kennt die Funktion immer noch nicht. Muß ich in dem Header File für die Lib noch was ändern?
oder liegt es an etwas anderem das er die Funktion nicht linken kann?
MfG
Achso wenn ich die DLL mit LoadLibrary einbinde liefert dann die Funktion GetProcAddress NULL. Woran könnte das liegen?
-
Hallo
Dein neuer Fehler liegt daran, das die lib beim linken nicht gefunden wird.
Du must sicherstellen das die Lib im Projekt eingefügt ist, und das der Pfad der Lib in den Suchpfaden steht (Menü Projekt/Optionen/Verzeichnisse/Bibliothekspfad)bis bald
akari
-
hi,
ich habe beides schon gemacht es muß ein anderer Fehler vorliegen. Ich habe die Lib datei im Projektverzeichnis und sie dem Programm hinzugefügt. Das projektverzeichnis habe ich dann auch als Bibliothekspfad angegeben.
Welche Ursache könnte diese Meldung noch haben?
MfG
-
maikhaenig schrieb:
Achso wenn ich die DLL mit LoadLibrary einbinde liefert dann die Funktion GetProcAddress NULL. Woran könnte das liegen?
Vermutlich wird der Funktionsname vom MSVC dekoriert. Du kannst mit impdef oder auch Dependency Walker den korrekten Funktionsnamen nachschauen (dabei allerdings "Undecorate C++ Functions" deaktivieren).
AFAIK lassen sich DLLs und LIBs mit C++-Interface nicht compilerübergreifend verwenden, da fast alle unterschiedliche Name-Mangling-Verfahren anwenden (dynamisches Laden über GetProcAddress geht zwar trotzdem, aber die Probleme fagen spätestens bei unterschiedlichen Aufrufkonventionen, VTable-Organisationen etc. an). Für sprach- und compilerneutral anwendbare DLLs kannst du z.B. auf ein in C geschriebenes oder auf ein COM-Interface zurückgreifen.