첫 번째 질문은 여기에 있습니다. 내가 잘못하면 힌트를주세요.Delphi wrapper를 통해 C++ 함수를 호출하는 방법
내 질문 : 델파이 래퍼 (VCL)를 통해 C++ 함수를 호출해야합니다. 델파이 래퍼는 다음과 같습니다.
function TFoxBurnerSDK.ReadFileContents(FilePath: string; Offset: int64; var Buffer; Length: integer; var ActualLength: integer): boolean;
begin
CheckActive;
if FSessionHandle=nil then begin
FLastError:=BS_SDK_ERROR_BAD_REQUEST;
Result:=false;
Exit;
end;
Result:=DLLResult(FoxBurnerSDKCore.ReadFileContents(FSessionHandle,
PFoxSDKChar(FoxSDKString(FilePath)), Offset, @buffer, Length, @ActualLength));
end
델파이 코드에서이 함수를 호출하는 방법. var/parameter를 함수에 보내야한다는 것을 의미합니까? 이 버퍼와 ActualLength 포인터는 C++로
int32 BS_CALL ReadFileContents(HSESSION hSession, const TCHAR* lpszFilePath, int64 nOffset, void* pBuffer, int32 nBufferSize, int32* pRead);
을 것 같다 그리고 델파이에서 포인터를 처리하는 방법, 나에 대한 문제입니다.
procedure TForm1.Button1Click(Sender: TObject);
var Bytes: TBytes;
iRead : integer;
begin
SetLength(Bytes, 2352*27);
iRead:=0;
Burner.ReadFileContents('\autorun.inf', 0, Bytes, 2352*27, iRead);
end;
그러나이 메모리 expection가 발생합니다 :이 델파이 옳은이라고 생각했다. C++ 샘플에서 함수를 호출하면 잘 작동합니다. 델파이에서 방금 expection이 일어납니다. 그래서 나는 뭔가 잘못했다고 생각합니다.
답변을 얻으려는 데 필요한 모든 정보를 제공했으면합니다. 그렇지 않다면 내가 놓친 것을 알려주십시오. 고맙습니다.
추가 정보 : 정의 :
ReadFileContents : function (Session: HSESSION; FilePath: PFoxSDKChar; Offset: int64; Buffer: pointer; BufferSize: integer; Read: pinteger): integer; stdcall;
function ReadFileContents(FilePath: string; Offset: int64; var Buffer; Length: integer; var ActualLength: integer): boolean;
'FoxBurnerSDKCore.ReadFileContents'의 정의를 보여 주어야합니다. – AmigoJack
안녕하세요 AmigoJack, 질문에 견적을 추가했습니다. – IFDev
여기에 충분한 정보가 없습니다. 따라서 downvote 및 닫기 투표. 함수를 호출하는 방법에 대한 자세한 설명을 제공하고 코드를 쉽게 읽을 수 있도록 형식을 지정하십시오. –