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

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

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