我使用它包含以下方法的API:
BOOL GetItemPropertyDescription (HANDLE hConnect, int PropertyIndex, DWORD *pPropertyID, VARTYPE *pVT, BYTE *pDescr, int BufSize);
BOOL ReadPropertyValue (HANDLE hConnect, LPCSTR Itemname, DWORD PropertyID, VARIANT *pValue);
这将是在C#相同呢?
是什么意思DWORD, VARTYPE, VARIANT
数据类型?
有一个相当完整的表在这里 表1处。 试看看。
DWORD is uint
VARTYPE is an ushort (but you have a ref ushort there)
or much better a VarEnum (but you have a ref VarEnum there)
(VarEnum is defined under System.Runtime.InteropServices)
VARIANT is object (but you have a ref object there)
这里有对VARIANT的编组的文章: http://blogs.msdn.com/b/adam_nathan/archive/2003/04/24/56642.aspx
确切的PInvoke是复杂的写,这取决于参数的方向和它们的精确规格。 是pPropertyID
一个指针指向一个单一DWORD
,或者是一个指向第一个DWORD
“阵列”的? 又是谁“填补”的价值指向,主叫或被叫方或两者兼而有之? 同所有其他指针。
技术上全部/部分ref
小号可能会out
,如果他们是由被叫填补。
通过这些方法的名字,他们的PInvoke可能是:
[DllImport("YourDll.dll")]
//[return: MarshalAs(UnmanagedType.Bool)] // This line is optional, and it's implicit
bool GetItemPropertyDescription(IntPtr hConnect,
int propertyIndex,
out uint pPropertyID,
out VarEnum pVT,
out IntPtr pDescr,
int bufSize);
[DllImport("YourDll.dll", CharSet = CharSet.Ansi)]
//[return: MarshalAs(UnmanagedType.Bool)] // This line is optional, and it's implicit
bool ReadPropertyValue(IntPtr hConnect,
string itemName,
uint propertyID,
out object pValue);