【发布时间】:2016-10-24 06:47:07
【问题描述】:
我在这里的第一个问题。如果我做错了,请给我提示。
我的问题:我必须通过 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 代码中调用此函数。意味着我需要向函数发送什么变量/参数?看来buffer和ActualLength是C++中的指针
int32 BS_CALL ReadFileContents( HSESSION hSession, const TCHAR* lpszFilePath, int64 nOffset, void* pBuffer, int32 nBufferSize, int32* pRead );
这就是我的问题,如何在 Delphi 中处理指针。我认为这是 Delphi 中的正确调用:
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,我已在问题中添加了两个定义。
-
这里没有足够的信息。因此,否决票和关闭投票。请提供有关如何调用该函数的完整描述,并格式化您的代码以便于阅读。
-
通过H2Pas工具运行C头
标签: c++ delphi delphi-10.1-berlin