鑑於以下C++代碼沒有提到函數聲明中的調用約定,導出函數Exported
的調用約定是什麼?我的猜測會是cdecl的默認值。導出函數(VS2008)的默認調用約定是什麼?
extern "C"
{
__declspec (dllexport) bool Exported(int parm);
}
我從託管代碼中調用這個函數,使用LoadLibrary
,GetProcAddress
和Marshal.GetDelegateForFunctionPointer
。我可以使用UnmanagedFunctionPointer
屬性的不同值來裝飾我的委託定義,並且它們全都似乎可以工作。
強制客戶端程序員顯式使用CallingConvention屬性並沒有什麼意義,只是最大限度地發揮了錯誤的可能性。使用__stdcall。另外,在託管代碼中顯式調用LoadLibrary/GetProcAddress是非常不尋常的事情,這個pinvoke編組已經做到了。 –
*在託管代碼中顯式調用LoadLibrary/GetProcAddress非常不尋常*。我同意。 – mackenir
順便說一句,我是客戶端程序員 - 我檢查了我,我不介意必須指定CallingConvention;¬) – mackenir