XBa*_*000 -1 c# delphi pinvoke
我怎么能用Delphi代码写这个呢?
[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);
Run Code Online (Sandbox Code Playgroud)
像这样:
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';
Run Code Online (Sandbox Code Playgroud)
笔记:
IntPtr是指针大小的整数.在Delphi中NativeInt.uintCardinal在Delphi中是一个无符号的32位整数.string被编组到C字符串,指向以null结尾的字符串的指针.由于没有CharSet指定,因此使用默认值CharSet.Ansi.那是PAnsiChar在Delphi中.CallingConvention指定这样的默认CallingConvention.StdCall应用.那就是stdcall德尔福.byte[]是一个字节数组.那是作为指向数组第一个字节的指针编组的.所以,PByte在Delphi中.WDirInfo成Delphi.看起来它可能是一个结构.使用C++头文件而不是p/invoke声明可能会更好.最好从接口定义的原始源开始工作.
| 归档时间: |
|
| 查看次数: |
406 次 |
| 最近记录: |