.net - 如何从非托管代码调用托管代码?

标签 .net c++-cli interop clr unmanaged

我想从非托管 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/

相关文章:

c# - 如何混合泛型和真实类型

c# - 处置Microsoft.Office.Interop.Word.Application

.net - 将非托管 C++ 与 F# 混合用于物理 : worth it?

c# - .NET 垃圾收集器

c# - 将多个控件绑定(bind)到组合框中选定的对象

c# - 如何将 cpp/cli 文件显式链接到 c# 库 .dll?

.net - 如何在 C++/CLI 程序和 C++/CLI DLL 之间传递字节数组?

c# - 从 C++/CLI 调用 C# dll 函数

Java 应用程序窗口在 C# InterOp 中未被识别为 java 窗口

c# - WriteLine 方法