我现在正在经历一些非常奇怪的事情。当我将结构从 C++ 传递到 Delphi DLL 作为参数时,一切正常。但是,一旦我想收到一条记录,我就会得到错误的值或异常。我停用了记录的对齐方式,以便通过它们应该可以工作!这是代码!
德尔福DLL:
TSimpleRecord = packed record
Nr1 : Integer;
Nr2 : Integer;
end;
//...
function TTest() : TSimpleRecord; cdecl;
begin
Result.Nr1 := 1;
Result.Nr2 := 201;
ShowMessage(IntToStr(SizeOf(Result)));
end;
C++ 调用:
#pragma pack(1)
struct TSimpleRecord
{
int Nr1;
int Nr2;
};
//...
typedef TSimpleRecord (__cdecl TestFunc)(void);
TestFunc* Function;
HINSTANCE hInstLibrary = LoadLibrary("Reactions.dll");
if (hInstLibrary)
{
Function = (TestFunc*)GetProcAddress(hInstLibrary, "TTest");
if (Function)
{
TSimpleRecord Result = {0};
Result = Function();
printf("%d - %d - %d", sizeof(Result), Result.Nr1, Result.Nr2);
cin.get();
}
}
我不知道为什么将这条记录作为参数传递而不是作为函数的结果!?
有人可以帮助我吗?
谢谢
PS:正如我所说,C++ 和 Delphi 都显示记录是 8 字节大。