为了学习在C#中使用PInvoke,我有点不确定如何处理涉及简单值类型的指针的各种情况.
我从非托管DLL导入以下两个函数:
public int USB4_Initialize(short* device); public int USB4_GetCount(short device,short encoder,unsigned long* value);
第一个函数使用指针作为输入,第二个函数使用指针作为输出.它们的用法在C中相当简单:
// Pointer as an input short device = 0; // Always using device 0. USB4_Initialize(&device); // Pointer as an output unsigned long count; USB4_GetCount(0,&count); // count is output
我在C#中的第一次尝试导致以下P / Invokes:
[DllImport("USB4.dll")] public static extern int USB4_Initialize(IntPtr deviceCount); //short* [DllImport("USB4.dll")] public static extern int USB4_GetCount(short deviceNumber,IntPtr value); //ulong*
解决方法
如果指针指向单个基本类型而不是数组,请使用ref / out来描述参数
[DllImport("USB4.dll")] public static extern int USB4_Initialize(ref short deviceCount); [DllImport("USB4.dll")] public static extern int USB4_GetCount(short deviceNumber,ref uint32 value)
在这些例子中,可能更合适,但两者都可行.