Highzwerg Geschrieben 26. September 2005 Geschrieben 26. September 2005 Servus, hab das Problem das ich ein BB6 Projekt habe und jetzt eine DLL (emDLL.dll mit em2800.lib) bekommen habe. Diese müßte ich im BB6 Projekt benutzen. Das Problem is nur das mein Linker den Konstruktor als unresovled external bezeichnet... Klassenexport/import Def: #ifdef EMDLL_EXPORTS #define EMDLL_API __declspec(dllexport) #else ////#define EMDLL_API __declspec(dllimport) #define EMDLL_API #endif kann mir da jmd helfen? mfg Alex P.S.: Hab auch die Lib eingebunden Zitieren
Bubble Geschrieben 26. September 2005 Geschrieben 26. September 2005 ////#define EMDLL_API __declspec(dllimport) Warum ist diese Zeile auskommentiert? Handelt es sich um C oder C++? Falls C in C++ wurde auf den Einsatz von extern "C" geachtet? Wenn es C++ ist muss Dein C-Builder die Funktionsnamen genau so abbilden, wie der zur Erzeugung der lib und dll verwendete Compiler (in Deinem Fall Visual C++). Zitieren
Highzwerg Geschrieben 26. September 2005 Autor Geschrieben 26. September 2005 Warum die Zeile auskommentiert is weiß ich auch nich genau...Hab wie gesagt nur den Header, die DLL und ne Lib bekommen... Is C++... Wenn ich etz z.b. die Lib aufmach steht vor dem Funktionsnamen ein "?". Bei einer von mir erzeugten DLL unter BB steht ein "_" davor... Sagt das vielleicht jmd was welche Aufrufkonvention ich da dann benutzen muss? Bin ratlos :confused: mfg Alex Zitieren
Klotzkopp Geschrieben 26. September 2005 Geschrieben 26. September 2005 Wenn die Namen dekoriert sind, kannst du Load Time Dynamic Linking vergessen. Die Namensdekoration für exportierte C++-Symbole ist nicht standardisiert, da kocht jeder Compilerhersteller sein eigenes Süppchen. Du wirst also Run Time Dynamic Linking (LoadLibrary, GetProcAddress) benutzen müssen. Zitieren
Highzwerg Geschrieben 26. September 2005 Autor Geschrieben 26. September 2005 Och nö, da muss ich wieder soviel schreiben Zitieren
Bubble Geschrieben 26. September 2005 Geschrieben 26. September 2005 Warum die Zeile auskommentiert is weiß ich auch nich genau...Hab wie gesagt nur den Header, die DLL und ne Lib bekommen... Is C++... Nimm die Kommentare mal wieder weg. __declspec(dllimport) macht Visual C++ bekannt, dass eine Funktion aus einer DLL benutzt werden soll. Ob Dein Compiler damit auch umgehen kann, wirst Du ja beim Testlauf erfahren Wenn ich etz z.b. die Lib aufmach steht vor dem Funktionsnamen ein "?". Bei einer von mir erzeugten DLL unter BB steht ein "_" davor... Sagt das vielleicht jmd was welche Aufrufkonvention ich da dann benutzen muss? C++ benutzt so genanntes "name mangling", bei dem die Funktionsnamen und Namen von Member-Functions auf einen eindeutigen Bezeichner abgebildet werden. Das Verfahren ist nicht standardisiert, daher können sich hier Compiler unterscheiden. Wenn zwei Compiler nicht mit dem gleichen Verfahren arbeiten, kommt es zu Problemen. Umgehen kann man diese Probleme i.d.R. nur völlig, indem man beim Entwurf der DLL nur ein "C-Style-Interface" exportiert und auch nur dieses importiert. Der Export von C++ Klassen ist dann aber nicht möglich. Ob Symbole mit C-Konvention importiert oder exportiert werden erkennst Du daran, dass die Prototypen in einen Block eingschlossen sind, dem ein extern "C" vorangestellt ist. Zitieren
Bubble Geschrieben 26. September 2005 Geschrieben 26. September 2005 Du wirst also Run Time Dynamic Linking (LoadLibrary, GetProcAddress) benutzen müssen. Auch hierbei sage ich größere Probleme voraus, insbesondere wenn Klassen verwendet werden sollen. Zitieren
Klotzkopp Geschrieben 26. September 2005 Geschrieben 26. September 2005 Auch hierbei sage ich größere Probleme voraus, insbesondere wenn Klassen verwendet werden sollen.Richtig, es geht ja um Klassen. Da sehe ich ehrlich gesagt schwarz. Highzwerg, kannst du beim Hersteller nachfragen, ob es die DLL auch für Borland gibt? Zitieren
Highzwerg Geschrieben 28. September 2005 Autor Geschrieben 28. September 2005 Servus, also habs noch a bissel probiert... Des Problem wird wahrscheinlich wirklich die Klasse sein... Des Prob is diese SDK kam nich direkt über nen Hersteller sondern über nen Geschäftspartner... Bis ma des dem erklärt was ma haben will und bis er des besorgt... Aba danke für eure Beiträge! Hab mir auch schon überlegt ne Def Datei anzulegen, aba diese Klasse... mfg Alex Zitieren
Bubble Geschrieben 28. September 2005 Geschrieben 28. September 2005 Aba danke für eure Beiträge! Hab mir auch schon überlegt ne Def Datei anzulegen, aba diese Klasse... Du könntest Dir, wenn Du eine passende Visual C++ Version besitzt, mit Visual C++ eine Wrapper-DLL um die DLL mit der Klasse bauen, die nur ein C-Style-Interface exportiert. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.