幻想森林

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 3075|回复: 4

[原创] HGE的system_log

[复制链接]

3

主题

11

帖子

113

积分

③业余

积分
113
发表于 2007-8-23 11:39:04 | 显示全部楼层 |阅读模式
System_Log(const char *szFormat, ...)

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

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


源码放到google上了

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

使用道具 举报

23

主题

218

帖子

2470

积分

⑥精研

积分
2470
发表于 2007-8-23 15:09:19 | 显示全部楼层
stdcall和cdecl一样可以支持不定个数参数,当使用固定个数参数时,堆栈由被调用者平衡,使用不定个数参数时由调用者平衡,这只是个调用约定而已。

D语言我不太懂,不过跟着使用stdcall约定,注意下DLL的输出名称应该就OK了。
ONScripter for PSP/Windows中文版 http://blog.163.com/john_he_
回复 支持 反对

使用道具 举报

136

主题

1751

帖子

548

积分

版主

Rank: 7Rank: 7Rank: 7

积分
548
发表于 2007-8-23 18:36:14 | 显示全部楼层
官方的说明是这样的
c:
int __stdcall abc (int c);

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

hge是com组织的,extern(Windows) 应该没有问题吧。
え~え~お!!!
回复 支持 反对

使用道具 举报

3

主题

11

帖子

113

积分

③业余

积分
113
 楼主| 发表于 2007-8-23 19:05:26 | 显示全部楼层
stdcall 也支持可变参数吗? 怎么我在网上找的资料全是说不支持啊?

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

使用道具 举报

136

主题

1751

帖子

548

积分

版主

Rank: 7Rank: 7Rank: 7

积分
548
发表于 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到的
え~え~お!!!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|幻想森林

GMT+8, 2024-3-29 22:27 , Processed in 0.021491 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表