私は今、いくつかの非常に奇妙なことを経験しています。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 バイトの大きさであることを示しています。