[原创] HGE的system_log
System_Log(const char *szFormat, ...)这个不应该是C调用方式吗? 但是HGE头文件定义的格式怎么是 _stdcall呢?
我把HGE包装给D语言用,由于不太懂C++,所以一直没有弄完,核心库动态调用C++DLL,静态库全部翻译到D了
源码放到google上了
http://code.google.com/p/hge4d/ stdcall和cdecl一样可以支持不定个数参数,当使用固定个数参数时,堆栈由被调用者平衡,使用不定个数参数时由调用者平衡,这只是个调用约定而已。
D语言我不太懂,不过跟着使用stdcall约定,注意下DLL的输出名称应该就OK了。 官方的说明是这样的
c:
int __stdcall abc (int c);
d:
extern(Windows) int abc(int c);
hge是com组织的,extern(Windows) 应该没有问题吧。 stdcall 也支持可变参数吗? 怎么我在网上找的资料全是说不支持啊?
我也是采取的 extern(Windows) 调用的,system_log 我例程里调用了多次了,没出现过什么状况,但是一直觉得不太明白。 __cdecl、__fastcall、__stdcall是VC的三种调用规范:
调用规范决定从左至右或从右至左的参数传递,有何负责清空堆栈以及函数名称的解释
调用规范 传送顺序 堆栈清除执行者 解释风格
__cdecl 右->左 调用程序 _functionName
__fastcall 右->左 被调用程序 @functionName@nnn
__stdcall 右->左 被调用程序 _functionName@nnn
__fastcall改进了__cdecl的缺省情况,但用在所调用C函数至少有一个参数时,选中该项
编译器将前两个参数送到寄存器ECX DEX,而不是用堆栈,其他参数缺省传入到__cdecl堆栈
__fastcall不许函数使用可变参数长度
__stdcall由Windows API使用,从总体上减小了代码长度,允许使用变长参数表。
----------------------------------------
google到的
页:
[1]