我有一個C#應用程序(86 .NET 3.5在Windows 7 VS2010),它調用C函數對PInvoke函數「ABC」的調用使堆棧不平衡。
,當我升級到.NET 4,我得到了以下信息:
這可能是因爲託管PInvoke簽名與非託管目標籤名不匹配。檢查PInvoke簽名的調用約定和參數是否與目標非託管簽名相匹配。
Ç簽名:
BOOL ABC(UDF_HANDLE手柄,字符* pQualifiedName) //#限定UDF_HANDLE無效*
C#側:
[SecuritySafeCritical]
[DllImport(dllPath, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall, ThrowOnUnmappableChar = true)]
internal static extern int ABC(
[In] IntPtr handle,
[MarshalAs(UnmanagedType.LPStr)] string qualifiedName);
任何幫助理解。
這裏它是頭文件中的簽名:int ABC(int handle,char * pQualifiedName); – Khayralla
問題在於:BOOL ABC(UDF_HANDLE handle,char * pQualifiedName)//定義UDF_HANDLE void *和頭文件中的定義:int ABC(int handle,char * pQualifiedName); – Khayralla