从 C# 调用外部 C 方法
我有一个C
库代码,其中定义了extern
方法:
typedef unsigned int U32;
extern U32 iw(U32 b, U32 p);
我还有一个Assembler
代码,其中定义了该方法。
如何从 C# 代码调用此 C
(甚至可能是 Assembler
)方法?
我可以使用 DllImport
属性?
I have a C
library code, in which extern
method is defined:
typedef unsigned int U32;
extern U32 iw(U32 b, U32 p);
I also have the Assembler
code, in which this method is defined.
How can I call this C
(or may be even Assembler
) method from C# code?
Can I use the DllImport
attribute?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
请注意,您需要考虑调用约定。大多数 Win32 API 都是为使用
stdcall
编写的,因此P/Invoke
默认情况下使用stdcall
。然而,VC++ 默认使用CDecl
。如果遇到问题,您可以将导出函数修改为 stdcall,也可以修改 P/Invoke 声明(我认为有一个可选的 CallingConvention<
DllImport
属性的 /code> 参数)Just be aware that you need to consider calling conventions. Most Win32 APIs are written to use
stdcall
, soP/Invoke
usesstdcall
by the default. However VC++ usesCDecl
by default.If you run into problems you can either modify your exported function to be
stdcall
, or you can modify yourP/Invoke
declaration (I think there's an optionalCallingConvention
argument to theDllImport
attribute)是的,您可以使用类似以下内容来调用 C dll 函数:
Yes, you can use something like the following to call your C dll function: