【问题标题】:DWORD and VARTYPE equivalent in c#C# 中的 DWORD 和 VARTYPE 等效项
【发布时间】: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 数据类型是什么意思?

【问题讨论】:

    标签: c# c#-4.0 pinvoke marshalling


    【解决方案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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-31
      • 2010-10-20
      • 2013-12-09
      相关资源
      最近更新 更多