有三種常見的可能:
-
託管代碼中的聲明不正確
-
.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