yish 发表于 2007-8-23 11:39:04

[原创] HGE的system_log

System_Log(const char *szFormat, ...)

这个不应该是C调用方式吗? 但是HGE头文件定义的格式怎么是 _stdcall呢?

我把HGE包装给D语言用,由于不太懂C++,所以一直没有弄完,核心库动态调用C++DLL,静态库全部翻译到D了


源码放到google上了

http://code.google.com/p/hge4d/

john_he 发表于 2007-8-23 15:09:19

stdcall和cdecl一样可以支持不定个数参数,当使用固定个数参数时,堆栈由被调用者平衡,使用不定个数参数时由调用者平衡,这只是个调用约定而已。

D语言我不太懂,不过跟着使用stdcall约定,注意下DLL的输出名称应该就OK了。

shawind 发表于 2007-8-23 18:36:14

官方的说明是这样的
c:
int __stdcall abc (int c);

d:
extern(Windows) int abc(int c);

hge是com组织的,extern(Windows) 应该没有问题吧。

yish 发表于 2007-8-23 19:05:26

stdcall 也支持可变参数吗? 怎么我在网上找的资料全是说不支持啊?

我也是采取的 extern(Windows) 调用的,system_log 我例程里调用了多次了,没出现过什么状况,但是一直觉得不太明白。

shawind 发表于 2007-8-23 19:25:52

__cdecl、__fastcall、__stdcall是VC的三种调用规范:   
调用规范决定从左至右或从右至左的参数传递,有何负责清空堆栈以及函数名称的解释   
   
调用规范       传送顺序   堆栈清除执行者   解释风格   
__cdecl         右->左       调用程序               _functionName   
__fastcall   右->左       被调用程序         @functionName@nnn   
__stdcall   右->左       被调用程序         _functionName@nnn   
   
__fastcall改进了__cdecl的缺省情况,但用在所调用C函数至少有一个参数时,选中该项   
编译器将前两个参数送到寄存器ECX   DEX,而不是用堆栈,其他参数缺省传入到__cdecl堆栈   
   
__fastcall不许函数使用可变参数长度   
   
__stdcall由Windows   API使用,从总体上减小了代码长度,允许使用变长参数表。   
----------------------------------------
google到的
页: [1]
查看完整版本: [原创] HGE的system_log