【发布时间】:2022-12-12 10:09:35
【问题描述】:
我必须使用 delphi 访问 DLL。问题是:我只有 .h 文件而没有 delphi 文件。 大多数功能翻译和工作都很容易,但这是:
`FUNCTION_PRE64 ULONG FUNCTION_PRE OpenModuleEx(ULONG moduleID, ULONG nr, unsigned char *exbuffer, ULONG open_options);`F
我对德尔福的翻译是:
function OpenModuleEx(moduleID:Longint; nr:Longint; &buffer: exbuffer; open_options: longint): Longint; stdcall; external 'master.dll'
typedef struct
{
unsigned char address[256];
ULONG timeout;
ULONG portno;
ULONG encryption_type;
unsigned char encryption_password[32];
} DAPI_OPENMODULEEX_STRUCT;
在德尔福。
type exbuffer = packed record
address : array of byte;
timeout : Longint;
portno : Longint;
encryption_type : Longint;
encryption_password : Array of byte;
end;
至少这样可以填充记录并执行:
BinarySize := (Length('10.241.0.147') + 1) * SizeOf(Char);
SetLength(buffer.address, BinarySize);
Move('10.241.0.147'[1], buffer.address[0], BinarySize);
buffer.portno := 9912;
buffer.timeout := 5000;
buffer.encryption_type := 0;
BinarySize := (Length('') + 1) * SizeOf(Char);
SetLength(buffer.encryption_password, BinarySize);
Move(''[1], buffer.encryption_password[0], BinarySize);
lhandle := OpenModuleEx(42, 0, &buffer, 0 );
返回的句柄总是 0 :-(
我必须说,我没有 C 专家,也没有 Delphi 专家使用“bitmoving”;-)
我的delphi版本是XE7
谁能帮我把struc翻译成delphi,怎么填啊??
非常感谢 史蒂夫
【问题讨论】:
-
array of Byte是一个动态的大批;它是一个引用类型。记录成员只是一个指向 Delphi 动态数组堆对象的指针。记录本身需要 256 和 32 个字符:也就是说,您需要静止的阵列。