在一个新的 Win32 项目中,我有以下 Delphi 函数:
procedure SetValue(value1, value2 : Extended);
begin
end;
在同一个项目中,但来自 C++ 单元,我调用此函数:
SetValue(10, 40);
当我value1
使用 BCC32C (CLang) 编译时检查时,我得到 1.68132090507504896E-4932,这是不正确的。
用 BCC32(经典)编译,我得到 10。
在这两种情况下,第二个参数都是 40。
似乎Extended
值和参数堆栈加载存在问题。
我使用 RAD Studio 10.1 Berlin。
我该如何解决这个问题?
更新
我没有包含声明,因为 hpp 是在编译时自动创建的。无论如何,声明是:
extern DELPHI_PACKAGE void __fastcall SetValue(System::Extended value1, System::Extended value2);
要复制项目:
1-在 Rad Studio 中创建一个 C++ 项目
2-用上面的SetValue函数添加一个Delphi单元
3-从 C++ 单元,使用 #include 添加 hpp 标头并调用 SetValue
这是全部。
我需要使用扩展类型。我正在使用外部 Delphi 库,因此无法更改类型。上面的代码是对问题的简化。实际上,问题在于调用该库的函数,该函数在参数中使用了 Extended。Extended 是 Delphi 中的本机类型,但在 C++ 中它映射为 long double,10 字节(对于 Win32)。