我有一個C
庫代碼,在其被定義extern
方法:外部C方法調用從C#
typedef unsigned int U32;
extern U32 iw(U32 b, U32 p);
我也有Assembler
代碼,在其中定義此方法。
我該如何從C#代碼中調用這個C
(或者甚至可能是Assembler
)方法?
我可以使用DllImport
attribute嗎?
我有一個C
庫代碼,在其被定義extern
方法:外部C方法調用從C#
typedef unsigned int U32;
extern U32 iw(U32 b, U32 p);
我也有Assembler
代碼,在其中定義此方法。
我該如何從C#代碼中調用這個C
(或者甚至可能是Assembler
)方法?
我可以使用DllImport
attribute嗎?
是的,你可以使用類似下面的打電話給你的C DLL函數:
[DllImport("your.dll", EntryPoint="iw")]
public static extern UInt32 NiceNameFunc(UInt32 niceNameA, UInt32 niceNameP);
要知道,你需要考慮調用約定。大多數Win32 API編寫爲使用stdcall
,所以P/Invoke
默認使用stdcall
。但是VC++默認使用CDecl
。
如果遇到問題,你可以修改你的導出函數是stdcall
,也可以修改您的P/Invoke
聲明(我覺得有一個可選的CallingConvention
參數來DllImport
屬性)