Aufrufkonventionen
-
Hallo !
Habe eine kurze Frage über die Aufrufkonventionen.
So wie ich das verstanden habe benutzt die WinApi immer __stdcall, ist das richtig??
Also wenn ich dann mal eine Funktion alleine mittels declspec importieren will (was man natürlich nicht macht !!) dann würde das so aussehen
extern __declspec(dllimport) char* __stdcall _getcwd(char * buffer, int maxlen);Ich frage nur, weil es bei mir ohne __stdcall genau so funktioniert wie mit (kann es vielleicht daran liegen das der Compiler diese Aufrufkonvention automatisch benutzt??)
Nächste Frage ^^
Wenn ich eine eigene DLL schreibe, verwende ich keine Aufrufkonventionen, welche wird hier dann eigentlich verwendet ?? Gibt es eine Default-Aufrufkonvention ???
Bzw. wie geschieht das mit einfachen lokalen Funktionen, wo ich ja auch keine Aufrufkonvention angebe ??Und die letzte Frage:
Warum verwendet die WinAPI __stdcall, wenn man ja eigene Funktionen DLL etc. schreiben kann ohne Aufrufkonventionen ?? __fastcall ist mir klar, da werden die Parameter über die Register übergegeben was um einiges schneller ist als über den Stack.
Hoffe mir kann das mal jemand erklären
Danke im Voraus !!
lg McLove
-
Jetzt ist mir noch eine Frage gekommen.
Hab gerade veruscht das Programm ohne __declspec(dllimport) auszuführen, und es klappt auch.
Ich verwende Code::Blocks mit dem GNU GCC Compiler.
Wenn mir noch jemand die Frage beantworten könnte, warum es denn auch ohne __declspec(dllimport) funktioniert Funktionen zu importieren ??
extern int funktionsname(xyz);Eigentlich dürfte das ja nicht funktionieren oder ?
Danke
-
Sry für den 3-Fach post !!
Aber ich hab das hier jetzt ausprobiert :
extern __declspec(dllimport) char* __stdcall _getcwd(char * buffer, int maxlen);mit __stdcall funktioniert es nicht, nur ohne, das lässt wohl darauf deuten das es in der Header datei auch ohne __stdcall deklariert wurde oder nicht ?
Und das verstehe ich nicht, wenn es keine Aufrufkonvention hat, welche wird verwendet ?? __stdcall jedenfalls nicht, sonst würde obiger Code funktionieren.
So das wars jetzt aber wirklich