Maj*_*cRa 19
看看这个解决方案:https: //sites.google.com/site/robertgiesecke/Home/uploads/unmanagedexports 该解决方案允许通过使用[DllExport]属性(与P/Invoke DllImport相反)修饰您的函数来从C调用C#函数.
〔实施例:
C#代码
class Test
{
[DllExport("add", CallingConvention = CallingConvention.StdCall)]
public static int Add(int left, int right)
{
return left + right;
}
}
Run Code Online (Sandbox Code Playgroud)
C代码:
extern "C" int add(int, int);
int main()
{
int z = add(5,10);
printf("The solution is found!!! Z is %i",z);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
The solution is found!!! Z is 15
Run Code Online (Sandbox Code Playgroud)
更新:评论中有一个问题和一个好的答案:
如何在非托管项目中包含dll?
您必须链接到编译C#代码时生成的.lib文件(https://msdn.microsoft.com/en-us/library/ba1z7822.aspx?f=255&MSPPError=-2147217396)
假设您正在讨论真正的非托管代码 - 不仅仅是在使用/ clr编译的混合模式程序集中运行的本机C++ - 最简单的方法是在C++/CLI中创建.NET代码的包装器.然后,您可以通过使用__declspec(dllexport)标记它们来导出C++/CLI方法.
或者,如果您可以控制非托管代码的调用,则可以编组.NET方法的函数指针并将它们传递给非托管代码.
归档时间: |
|
查看次数: |
29120 次 |
最近记录: |