gpt4 book ai didi

delphi - Delphi 中通过内存地址调用可变参数 C 函数

转载 作者:行者123 更新时间:2023-12-03 02:37:39 28 4
gpt4 key购买 nike

假设我有一个 C++ 函数,我在其中使用指向其内存地址的指针和 typedef 来调用它。现在,我怎样才能在 Delphi 中做同样的事情呢?

例如:

typedef void (*function_t)(char *format, ...);
function_t Function;
Function = (function_t)0x00477123;

然后,我可以使用以下方式调用它:Function("string", etc);

在 Delphi 中,有没有办法在不使用汇编指令的情况下做到这一点?

请注意,它是一个可变参数函数。

最佳答案

对此的惯用翻译:

typedef void (*function_t)(char *format, ...);
function_t Function;
Function = (function_t)0x00477123;

这是:

type
TFunction = procedure(Format: PAnsiChar) cdecl varargs;
var
Function: TFunction;
// ...
Function := TFunction($00477123);

需要“cdecl varargs”来获取 C 调用约定(调用者弹出堆栈)和可变参数支持(仅受 C 调用约定支持)。仅支持 Varargs 作为调用 C 的一种方式; Delphi 中没有内置支持以 C 风格实现可变参数列表。相反,有一种不同的机制,由 Format 过程和 friend 使用:

function Format(const Fmt: string; const Args: array of const): string;

但是您可以在其他地方找到更多相关信息。

关于delphi - Delphi 中通过内存地址调用可变参数 C 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2149901/

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