有三种常见的可能:
-
托管代码中的声明不正确
-
.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