stdcall -> ungewünschte Funktionsnamen

Fragen zu allen anderen Programmiersprachen.
Benutzeravatar
Josef Sniatecki
Beiträge: 657
Registriert: 02.06.2008 21:29
Kontaktdaten:

stdcall -> ungewünschte Funktionsnamen

Beitrag von Josef Sniatecki »

Hallo an alle,

seit letzter Zeit bin ich dabei, mein 2D-Jump&Run-Spiel auch durch C++-DLLs erweiterbar zu machen. Deshalb habe ich hier mal wieder eine Frage zum Export von Funktionen in C++. Weil ich nur CallFunctionFast und Prototype (und nicht CallCFunctionFast und PrototypeC) verwenden möchte, sieht bei mir der Kopf einer zu exportierenden C++-Funktion wie folgt aus:

Code: Alles auswählen

extern "C" __declspec(dllexport) long __stdcall Name(...)
Das Problem ist nun, dass mir (wie es eigentlich üblich ist) die Parameteranzahl (in Bytes) an die Namen mit einem "@" angehängt wird, was ich aber umgehen möchte. Kennt jemand eine Lösung dazu?

Vielen Dank im Voraus.
Gruß Josef
PB 4.61 | Windows Vista - 32Bit
Homepage

"Wahrlich es ist nicht das Wissen, sondern das Lernen, nicht das Besitzen sondern das Erwerben, nicht das Dasein, sondern das Hinkommen, was den grössten Genuss gewährt." - Carl Friedrich Gauß
Benutzeravatar
shadow
Beiträge: 189
Registriert: 23.03.2005 17:52
Wohnort: Lübeck

Re: stdcall -> ungewünschte Funktionsnamen

Beitrag von shadow »

Hi,

das hängt vom jeweiligen Compiler ab. Da müsste es eine Funktion geben wie "Namen exportierter Funktionen vereinfachen" oder so. Oder du erstellst dir selbst eine .def-Datei, dort kannst du dann die exportierten Funktion benennen (glaube ich zumindest, ist etwas her).
ThinkPad T61 (in Gedenken) | PureBasic 4.61 B1 (32) | Windows 7 (32SP1) | ArchLinux (32) | Syllable (32)
Benutzeravatar
Josef Sniatecki
Beiträge: 657
Registriert: 02.06.2008 21:29
Kontaktdaten:

Re: stdcall -> ungewünschte Funktionsnamen

Beitrag von Josef Sniatecki »

Habe auch gerade im Internet erfahren, dass es vom Compiler abhängt. Ich erstelle meine DLL mit MinGW, weshalb sich diese sog. decoration erklärt. Jetzt muss ich nur noch herausfinden, wie ich das abstellen kann... trotzdem Danke, shadow.
PB 4.61 | Windows Vista - 32Bit
Homepage

"Wahrlich es ist nicht das Wissen, sondern das Lernen, nicht das Besitzen sondern das Erwerben, nicht das Dasein, sondern das Hinkommen, was den grössten Genuss gewährt." - Carl Friedrich Gauß
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: stdcall -> ungewünschte Funktionsnamen

Beitrag von Danilo »

Josef Sniatecki hat geschrieben:Hallo an alle,

seit letzter Zeit bin ich dabei, mein 2D-Jump&Run-Spiel auch durch C++-DLLs erweiterbar zu machen. Deshalb habe ich hier mal wieder eine Frage zum Export von Funktionen in C++. Weil ich nur CallFunctionFast und Prototype (und nicht CallCFunctionFast und PrototypeC) verwenden möchte, sieht bei mir der Kopf einer zu exportierenden C++-Funktion wie folgt aus:

Code: Alles auswählen

extern "C" __declspec(dllexport) long __stdcall Name(...)
Das Problem ist nun, dass mir (wie es eigentlich üblich ist) die Parameteranzahl (in Bytes) an die Namen mit einem "@" angehängt wird, was ich aber umgehen möchte. Kennt jemand eine Lösung dazu?
"stdcall -> ungewünschte Funktionsnamen" :)

Das hängt nicht vom Compiler ab. __stdcall ist ein Standard, den jeder Compiler
korrekt übersetzt, und dazu gehört eben das '@' und die Argumentenanzahl in
Bytes anzuhängen.
Wenn Du das nicht wünschst, mußt Du eine andere Aufrufkonvention wählen,
zum Beispiel __cdecl:

Code: Alles auswählen

extern "C" __declspec(dllexport) long __cdecl Name(...)
Dann mußt Du aber auch entsprechend CallCFunction() / CallCFunctionFast() / PrototypeC
verwenden.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Antworten