您的位置:首页 > 其它

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

2009-04-17 10:57 351 查看
有三种常见的可能:

托管代码中的声明不正确

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

在导出时改变 dll 名称

请检查以下情况:

是否违背任何 .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, "MySubKey", hkey)
End Function 'OpenMySubKey
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐