我需要调用非静态 C++ 成员函数
因此我需要使用thiscall
调用约定。
Delphi 不支持这种调用约定。
因此,在调用任何成员函数之前,我必须手动将参数推送到堆栈中。
asm
mov ecx, myClassPointer
end;
这工作正常,但我正在寻找更好的方法来做到这一点。
目前,我每次在调用函数之前都会使用类指针调用 asm 代码,这不太好。
由于我不是 Delphi 专家,我想知道您是否可以声明自己的调用约定或自动调用这些 thiscall 类方法。
您有以下选择:
- 在asm中编写适配器来调用该函数。这是您当前的解决方案,正如您所知,这种方法很脆弱且笨拙。
- 编写一个 C++ 适配器,提供互操作友好的界面。
在我看来,后一个选项是正确的解决方案。 C++ 代码不适合互操作。通过互操作公开 C++ 类是完全错误的。给消费者提出了不合理的要求。合理的方法包括 COM 和 Win32 中的纯 C 风格互操作。
编写一个自适应 C++ DLL,它使用不合理的 C++ 类并公开适当的互操作友好接口。该适配器是用 C++ 编写的,因此能够使用 C++ 代码。但随后它会导出一个互操作友好的接口变体,可以轻松地从任何工具链调用该变体。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)