gpt4 book ai didi

c++ - 将 C API 调用转换为 delphi

转载 作者:行者123 更新时间:2023-11-30 03:51:27 25 4
gpt4 key购买 nike

我正在努力处理以下 C 代码以将其转换为 Dephi。假设 DLL 是 myDLL.DLL:

struct ConfEx_Participant {
DWORD dwID;
DWORD dwPath;
};

LONG WINAPI AddtoConfEx(
IN OUT LPVOID lpParams, // parameter block
IN OUT DWORD* lpSize, // pointer to var holding size of lpParams
IN DWORD dwPath,
IN const ConfEx_Participant* pParticipant, //array of participants
IN DWORD cParticipant // number of participants
);

我正在尝试类似的东西:

PConfEx_Participant := ^TConfEx_Participant
TConfEx_Participant = record
dwCallID: DWORD;
dwPath: DWORD;
end;

type TAddtoConfEx = function {
lpParams: DWORD_PTR;
lpsize: DWORD_PTR;
dwPath: DWORD;
ConfEx_Participant: PConfEx_participant;
cParticipant: Integer;
end;

然后在实现部分:

Procedure Connect();
lResult: Integer;
Func := TAddToConfEx;
begin
Handle := SafeLoadLibrary('myDLL.DLL');
@Func := GetProcAddress(Handle, 'AddToConfEx');
lResult := Func(lpParams, lpSize, dwPath, @PConfEx_Participant, 2);
...

我在设置结构、填充它们然后将它们连接在一起时有点迷茫。

最佳答案

你的函数声明全错了,你调用它也是错误的。

尝试更像这样的东西:

type
PConfEx_Participant = ^ConfEx_Participant;
ConfEx_Participant = record
dwID: DWORD;
dwPath: DWORD;
end;

function AddtoConfEx(
lpParams: Pointer; // parameter block
var lpSize: DWORD; // pointer to var holding size of lpParams
dwPath: DWORD;
const pParticipant: PConfEx_Participant; //array of participants
cParticipant: DWORD // number of participants
): LONG; stdcall; external 'myDLL.DLL';

procedure Connect;
var
Params: Pointer;
Size: DWORD;
Path: DWORD;
Participants: array of ConfEx_Participant;
lResult: LONG;
begin
Params := ...; // whatever it needs to point at...
Size := ...; // however many bytes Params is pointing at...
Path := ...; // whatever value you need...
SetLength(Participants, ...); // whatever length you need...
// populate Participants as needed...
lResult := AddtoConfEx(Params, Size, Path, PConfEx_Participant(Participants), Length(Participants));
...
end;

或者这个:

type
PConfEx_Participant = ^ConfEx_Participant;
ConfEx_Participant = record
dwID: DWORD;
dwPath: DWORD;
end;

TAddtoConfEx = function(
lpParams: Pointer; // parameter block
var lpSize: DWORD; // pointer to var holding size of lpParams
dwPath: DWORD;
const pParticipant: PConfEx_Participant; //array of participants
cParticipant: DWORD // number of participants
): LONG; stdcall;

procedure Connect;
var
Func: TAddToConfEx;
Params: Pointer;
Size: DWORD;
Path: DWORD;
Participants: array of ConfEx_Participant;
lResult: LONG;
begin
Handle := SafeLoadLibrary('myDLL.DLL');
if Handle = 0 then RaiseLastOSError;
@Func := GetProcAddress(Handle, 'AddToConfEx');
if not Assigned(Func) then RaiseLastOSError;
...
Params := ...; // whatever it needs to point at...
Size := ...; // however many bytes Params is pointing at...
Path := ...; // whatever value you need...
SetLength(Participants, ...); // whatever length you need...
// populate Participants as needed...
lResult := Func(Params, Size, Path, PConfEx_Participant(Participants), Length(Participants));
...
end;

关于c++ - 将 C API 调用转换为 delphi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31255664/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com