如何将 C# 标头转换为德尔菲
本文关键字:转换 | 更新日期: 2023-09-27 17:56:13
我怎样才能用德尔福代码写这个?
[DllImport("FT_ND_API.dll")]
public static extern uint epas_CreateContext(out IntPtr hContextHandle,
uint ulFlags, uint ulApiVersion);
[DllImport("FT_ND_API.dll")]
public static extern uint epas_OpenDevice(IntPtr hContextHandle,
uint ulQueryType, IntPtr pQueryData);
[DllImport("FT_ND_API.dll")]
public static extern uint epas_GetProperty(IntPtr hContextHandle, uint ulFlags,
IntPtr pRefData, byte[] pPropData, uint ulPropSize);
[DllImport("FT_ND_API.dll")]
public static extern uint epas_CreateDir(IntPtr hContextHandle, uint ulFlags,
String pucName, String pucGuid, ref WDirInfo pDirInfo, uint ulSizeOfDirInfo);
像这样:
function epas_CreateContext(
out hContextHandle: NativeInt;
ulFlags: Cardinal;
ulApiVersion: Cardinal
): Cardinal; stdcall; external 'FT_ND_API.dll';
function epas_OpenDevice(
hContextHandle: NativeInt;
ulQueryType: Cardinal;
pQueryData: IntPtr
): Cardinal; stdcall; external 'FT_ND_API.dll';
function epas_GetProperty(
hContextHandle: NativeInt;
ulFlags: Cardinal;
pRefData: NativeInt;
pPropData: PByte;
ulPropSize: Cardinal
): Cardinal; stdcall; external 'FT_ND_API.dll';
function epas_CreateDir(
hContextHandle: NativeInt;
ulFlags: Cardinal;
pucName: PAnsiChar;
pucGuid: PAnsiChar;
var pDirInfo: WDirInfo;
ulSizeOfDirInfo: Cardinal
): Cardinal; stdcall; external 'FT_ND_API.dll';
笔记:
-
IntPtr
是一个指针大小的整数。在德尔福,这是NativeInt
. -
uint
是一个无符号的 32 位整数,Cardinal
德尔福。 -
string
被编送到 C 字符串,指针指向以 null 结尾的字符串。由于未指定CharSet
,因此使用默认值CharSet.Ansi
。这在德尔福PAnsiChar
。 - 未指定
CallingConvention
,因此默认值CallingConvention.StdCall
适用。所以,这在德尔福stdcall
。 byte[]
是一个字节数组。它被封送为指向数组第一个字节的指针。所以,PByte
德尔福。- 您还需要将
WDirInfo
翻译成德尔福。看起来它可能是一个结构。
最好使用 C++ 头文件而不是 p/invoke 声明。始终最好从接口定义的原始源开始工作。