현재 매우 이상한 일이 있습니다. C++에서 Delphi DLL로 구조체를 매개 변수로 전달할 때 모든 것이 정상적으로 작동합니다. 그러나 결과적으로 레코드를 받고 싶으면 잘못된 값이나 예외가 발생합니다. 레코드 정렬을 비활성화하여 전달하는 것이 효과가 있습니다! 코드가 깔끔합니다!Delphi DLL에서 C++ 로의 함수 결과 전달
델파이 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++ 및 레코드가 8 바이트 크다는 것을 델파이 쇼 모두를.
실제로 델파이 함수에서 반환 값을 설정하고 있습니까? – Angew
Result.Nr1 : = 1; Result.Nr2 : = 201; 그 일을해야합니다 – Henry
죄송합니다, 내가 마지막으로 델파이와 상호 작용할 때, '결과'는 여전히 함수 식별자 인 IIRR을 사용했습니다. – Angew