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

有三种常见的可能:

请检查以下情况:

  • 是否违背任何 .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

相关文章

Format[$] ( expr [ , fmt ] ) format 返回变体型 format$ 强...
VB6或者ASP 格式化时间为 MM/dd/yyyy 格式,竟然没有好的办...
在项目中添加如下代码:新建窗口来显示异常信息。 Namespace...
转了这一篇文章,原来一直想用C#做k3的插件开发,vb没有C#用...
Sub 分列() ‘以空格为分隔符,连续空格只算1个。对所选...
  窗体代码 1 Private Sub Text1_OLEDragDrop(Data As Dat...