DWORD和VARTYPE相当于在C#(DWORD and VARTYPE equivalent i

2019-10-18 11:36发布

我使用它包含以下方法的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数据类型?

Answer 1:

有一个相当完整的表在这里 表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);


文章来源: DWORD and VARTYPE equivalent in c#