gpt4 book ai didi

delphi - 为什么导入的类型库函数与原始源不同?

转载 作者:行者123 更新时间:2023-12-03 15:00:11 24 4
gpt4 key购买 nike

我正在尝试使用带有 COM 接口(interface)的第三方库。提供了一个 C++ 示例应用程序,它使用声明为的函数:

HRESULT __stdcall IMyInterface::DoSomething (BSTR id, long State)

导入类型库后,生成的Delphi代码为:

procedure DoSomething (const id: WideString; State: Integer); safecall;

在 C++ 示例应用程序中,结果 (HRESULT) 用于确定函数是否正确执行。
为什么 Delphi 将此声明转换为过程,以致我无法返回结果?
我可以做什么来解决这个问题?

最佳答案

safecall 调用约定只是 HResult 返回类型的转换。如果函数返回不成功(通常不是 S_OKS_False),它会被包装到异常中并抛出(或变成 reSafeCallError code> 运行时错误,如果 SysUtils 尚未在任何地方使用)。查看 System._CheckAutoResult 了解详细信息。

同样,如果您正在实现安全调用函数,则会捕获任何异常并将其转换为 HResult 值(E_Unexpected,除非 TObject.SafeCallException code> 被覆盖以返回其他内容)。请参阅 System._HandleAutoException 了解其工作原理。

如果您愿意,欢迎您将过程重新转换为返回 HResult 的函数。这种情况下的调用约定应该是stdcall。使用您的示例:

function DoSomething(const id: WideString; State: Integer): HResult; stdcall;

关于delphi - 为什么导入的类型库函数与原始源不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10870750/

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