我的第一个问题在这里。如果我做错了什么,请给我一个提示。如何通过Delphi包装器调用C++函数
我的问题:我必须通过Delphi包装器(VCL)调用C++函数。 delphi包装看起来像:
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
如何从Delphi代码中调用此函数。意思是我需要发送给函数的var /参数是什么?看来,缓冲区和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;
但是这会造成内存预期。如果我从C++示例中调用该函数,那么它运行良好。德尔福就在这里发生了一次预测。所以我认为我犯了错误。
我希望我给出了所有需要的信息来获得答案。如果不是,请让我知道我错过了什么。谢谢。
新增信息:定义:
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
这里没有足够的信息。因此,投票表决并投票。请提供关于如何调用该函数的完整说明,并对代码进行格式化以便于阅读。 –