【发布时间】:2013-05-30 20:18:22
【问题描述】:
我发现有一堆项目(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++ 本机代码相互通信,或者实际发生了什么?
【问题讨论】:
标签: c# c++ visual-c++