我正在努力使用以下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);
...
我在设置结构,填充它们然后将它们连接在一起时有点迷失。
答案 0 :(得分: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;