6 Stimmen

__cdecl erzwingt Präfix mit Unterstrich

Mein Unternehmen stellt einem Drittanbieter eine DLL zur Verfügung, die ihm API-Funktionen bietet, mit denen er eine Verbindung zu unserer Anwendung herstellen kann. Die DLL wurde in VC9 geschrieben, und die API-Funktionen verwenden die Standardaufrufkonvention von VC (__cdecl). Der Drittanbieter hat seine Anwendung um diese Schnittstelle herum aufgebaut.

Ich wurde nun damit beauftragt, eine aktualisierte Version der DLL zu schreiben. Wir wollen, dass die DLL genau die gleiche Schnittstelle hat wie die alte, damit sie austauschbar ist. Leider ist unsere Entwicklungsumgebung jetzt CodeGear RAD Studio 2007, also muss ich die DLL damit schreiben.

Die beste Lösung wäre, sowohl die alten als auch die neuen DLLs ihre Funktionen als __stdcall exportieren zu lassen. Die Anwendung eines Drittanbieters könnte dann neu verlinkt werden, um __stdcall-Funktionen zu erwarten, und alle wären zufrieden. Leider ist es aus verschiedenen Gründen unwahrscheinlich, dass dies geschieht.

Alternativ dazu kann ich die Funktionen in meiner DLL als __cdecl deklarieren. Der Drittanbieter erwartet __cdecl-Funktionen, so dass dies eine gute Lösung zu sein scheint. Leider besteht CodeGear darauf, einen Unterstrich ('_') an den Namen von __cdecl-Funktionen anzuhängen. Das bedeutet, dass die Anwendung des Drittanbieters einen bedingten Aufruf von MyApiFunction(...) o _MyApiFunction(...) je nachdem, welche DLL sie verwenden.

Also meine Frage ist, wie kann ich die API-Funktionen aus meiner neuen DLL in einer solchen Weise exportieren, dass sie __cdecl sind und sind nicht mit einem vorangestellten Unterstrich ('_')?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X