gpt4 book ai didi

c++ - Delphi thiscall 调用约定

转载 作者:可可西里 更新时间:2023-11-01 16:35:27 37 4
gpt4 key购买 nike

我需要调用非静态 C++ 成员函数

因此我需要使用thiscall调用约定。

Delphi 不支持这种调用约定。

因此,在调用任何成员函数之前,我必须手动将参数压入堆栈。

  asm
mov ecx, myClassPointer
end;

这很好用,但我正在寻找更好的方法。

目前,我每次都在调用函数之前使用类指针调用 asm 代码,这不太好。

因为我不是 Delphi 专家,我想知道您是否可以声明自己的调用约定或自动调用那些 thiscall 类方法。

最佳答案

您有以下选择:

  • 在 asm 中编写适配器以调用该函数。这是您当前的解决方案,正如您所知,这种方法既脆弱又笨拙。
  • 编写一个提供互操作友好界面的 C++ 适配器。

在我看来,后一种选择是正确的解决方案。 C++ 代码不适合互操作。通过互操作公开 C++ 类是完全错误的。它对消费者提出了不合理的要求。合理的方法包括在 Win32 中发现的 COM 和纯 C 风格的互操作。

编写一个适应性 C++ DLL,它使用不合理的 C++ 类并公开适当的互操作友好接口(interface)。适配器是用 C++ 编写的,因此能够使用 C++ 代码。但随后它导出了一个互操作友好的接口(interface)变体,可以很容易地从任何工具链调用。

关于c++ - Delphi thiscall 调用约定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32027412/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com