我发现有一堆项目(SharpDX等)正在编译以允许CLR“管理”本机代码,然后直接从例如c#调用该本机代码(c ++函数)。
我正在尝试弄清楚这是如何工作的……如果你们中的任何人都知道,那就太好了。
到目前为止,我所看到的是,我可以将 C# 项目中的引用添加到“CLR 兼容”C++ 库中,就像任何其他 c# 库(无需反射)一样,将其添加为:“使用 myCppLibrary”,然后只是调用任何可用的方法。
当我去查看我刚刚添加的引用中可用的函数时,似乎我可以从 c# 访问在 C++ 库的头文件 (.h) 文件中声明为 PUBLIC 的任何内容,因为它们被自动转换为 c# 代码编译器。
所以实际上发生的事情是:
我在我的 c++ 库的头文件 (.h) 中声明了公共方法/变量。我编译它们检查 CLR 管理在库的属性选项卡中是否可用。(我正在使用 Visual Studio 2012)编译器为每个头文件 (.h) 生成 c# 类,其中包含任何公共方法/属性。
但我不明白的是,当我打电话时,可以说,“myCppLibrary”中的 giveNumber() 函数......该函数的实现在哪里执行?
CLR 会自动与 c++ 本机代码进行交互还是实际发生了什么?