我想从非托管 C++ 调用我的 .NET 代码。我的进程入口点是基于 .NET 的,所以我不必担心托管 CLR。我知道它可以使用 .NET 对象的 COM 包装器来完成,但我想访问托管类的各个静态方法,所以 COM 不是我最短/最简单的路线。
最佳答案
看看这个解决方案:
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;
}
}
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;
}
输出:
The solution is found!!! Z is 15
更新 :评论中有一个问题和一个很好的答案:
如何在非托管项目中包含 dll?
您必须链接到编译 C# 代码时生成的 .lib 文件 (https://msdn.microsoft.com/en-us/library/ba1z7822.aspx?f=255&MSPPError=-2147217396)
关于.net - 如何从非托管代码调用托管代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/225277/