C++成员函数参数调用约定的问题

jxlczjp77 2011-07-11 01:26:25
有一个dll,估计是用g++编译的,类成员函数的调用约定很奇怪,this指针不是通过ecx传递而是当做一个参数压入堆栈。

现在要用vs来写代码调用这个dll,但是vs的默认thiscall总是通过ecx来传递this的。

我这样试了一下

class MyClass
{
public:
virtual void TestFunc1(int); //thiscall调用约定,this指针用ecx传递
virtual void __stdcall TestFunc2(int); //stdcall调用方式,this指针压入堆栈传递,但是TestFunc2负责清理堆栈
};

不知道vs能不能设置this指针的传递方式.
...全文
125 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
ryfdizuo 2011-07-11
  • 打赏
  • 举报
回复
jf~
northcan 2011-07-11
  • 打赏
  • 举报
回复
__cdecl:
C语言默认的函数调用方法:所有参数从右到左依次入栈。
luciferisnotsatan 2011-07-11
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 jackyjkchen 的回复:]

M$说过,C++的dll不仅不同的编译器之间不通用,不同版本的VC之间都不保证通用。
[/Quote]
++

这也是很多人骂C++原因之一
dxms8 2011-07-11
  • 打赏
  • 举报
回复
还有这么高深的东西。。。学习一下
jackyjkchen 2011-07-11
  • 打赏
  • 举报
回复
M$说过,C++的dll不仅不同的编译器之间不通用,不同版本的VC之间都不保证通用。

至善者善之敌 2011-07-11
  • 打赏
  • 举报
回复
正要说用__thiscall
ouyh12345 2011-07-11
  • 打赏
  • 举报
回复
jxlczjp77 2011-07-11
  • 打赏
  • 举报
回复
自己搞定了,原来这样就可以:
class MyClass
{
public:
virtual void TestFunc1(int); //thiscall调用约定,this指针用ecx传递
virtual void __stdcall TestFunc2(int); //stdcall调用方式,this指针压入堆栈传递,但是TestFunc2负责清理堆栈
virtual void __cdecl TestFunc3(int);//这样this就是通过堆栈传递了
};

64,651

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧