我一直以为,不同语言决定函数的调用约定,比如,C++使用cdecl,Delphi使用register,因为在查看Delphi帮助<Calling conventions>时,以及经常看到"各种语言中调用子程序的约定是不同的"这样的话,就武断的认为调用约定由语言决定,而API和DLL导出函数都是Stdcall约定。这就是我的错误。
现在,我认为约定是具体函数决定的。就如同DLL导出函数我们人为的指定了调用约定一样。所以,在处理堆栈平衡时,首先要看看函数返回时,是否自己做了堆栈平衡处理,如同代码add esp,4这样的代码或者Ret 8,否则就需要调用者使用add esp,4等来平衡。
以上胡言乱语,以提醒自己想多了,未必好事,得试一下。让看客得笑了。
哈哈哈。。。。