C# 中的 DWORD 和 VARTYPE 等效项

Posted

技术标签:

【中文标题】C# 中的 DWORD 和 VARTYPE 等效项【英文标题】:DWORD and VARTYPE equivalent in c# 【发布时间】:2013-08-06 10:19:16 【问题描述】:

我使用的 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】:

表 1 中有一个相当完整的表 here。试试看。

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 的指针?谁“填充”指向的值,调用者或被调用者或两者兼而有之?所有其他指针都相同。

如果refs 由被调用者填写,技术上所有/部分可能是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);

【讨论】:

以上是关于C# 中的 DWORD 和 VARTYPE 等效项的主要内容,如果未能解决你的问题,请参考以下文章

C# 中的 Jaxb 等效项

C# 中的 Java Map 等效项

JavaScript 中的 C# 字典等效项

如何最有效地测试两个数组是不是包含 C# 中的等效项

C# 默认关键字在 F# 中的等效项是啥?

Python 中的 C# Parallel.Foreach 等效项