Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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

Geschrieben

////#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++).

Geschrieben

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

Geschrieben

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.

Geschrieben
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.

Geschrieben

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.

Geschrieben
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?
Geschrieben

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

Geschrieben
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.

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...