当我对本机函数进行 P/Invoke 时,为什么会产生“NotSupportedException”?

前端之家收集整理的这篇文章主要介绍了当我对本机函数进行 P/Invoke 时,为什么会产生“NotSupportedException”?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

有三种常见的可能:

@H_502_4@
  • 托管代码中的声明不正确

  • .NET Compact Framework 不支持您试图要做的事情

  • 在导出时改变 dll 名称

  • 请检查以下情况:

    @H_502_4@
  • 是否违背任何 .NET Compact Framework P/Invoke 限制?

  • 是否有参数需要预分配内存(即,参数是指针)?如果是这样,您就应该将一个引用传递给现有的变量。

  • 导出函数名称是否正确?可以通过 DUMPBIN.EXE 来验证

  • 您是否试图传递过多参数

  • 例如,在以上的第二种情况,RegOpenKey API 需要一个指向 HKEY 的指针作为它的最后一个参数。您可以按照以下方式声明和调用它:

    //C#

    [DllImport("coredll.dll",SetLastError=true)]
    public static extern long RegOpenKey(
        IntPtr hkey,string lpSubKey,ref IntPtr hkeyResult
    );
    
    public long OpenMySubKey()
    {
        IntPtr hkey = IntPtr.Zero;
        return RegOpenKey(HKEY_CLASSES_ROOT,"MySubKey",ref hkey);
    }
    

    'VB

     _
    Public Shared Function RegOpenKey(ByVal hkey As IntPtr,ByVal lpSubKey As String,_
      ByRef hkeyResult As IntPtr) As Long
    End Function
    
    Public Function OpenMySubKey() As Long
        Dim hkey As IntPtr = IntPtr.Zero
        Return RegOpenKey(HKEY_CLASSES_ROOT,hkey)
    End Function 'OpenMySubKey
    

    猜你在找的VB相关文章