gpt4 book ai didi

c++ - 在C#项目中,如何引用用C++编写并用/clr编译的项目?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:27:23 25 4
gpt4 key购买 nike

我有一个用非托管 C++ 编写并生成 DLL 的相当大的项目。我希望能够在 .Net 项目中使用 DLL(在本例中,只是一个基本的 WinForm 应用程序)。我用/clr 集重建了 DLL。它构建成功。在我的 WinForm 项目中,我选择了添加引用,选择了项目选项卡,然后选择了 DLL 项目。它已成功添加为我的 WinForm 项目中的引用。但是,我在使用 DLL 时遇到问题。我想为它添加一个 using 指令,但我不知道 DLL 的名称是什么。我尝试使用与文件相同的名称,但没有用。我如何找出它在 using 指令中使用的名称?

非常感谢!

罗布

最佳答案

/clr 开关使您能够将 .NET 类型(ref classinterface class)与其他 C++ 代码混合。它不会神奇地使 native C++ 代码在 C# 中可用。

除其他原因外,C++ 代码严重依赖于保持不变的对象地址,但在 .NET 中则不然。 .NET 要求所有对象都有一个 v 表,以便垃圾收集器可以找出对象的数据类型(以及因此包含对象指针的位置),但大多数 native 类型根本没有 v 表。如果不更改布局并破坏与 native 代码的兼容性,编译器就无法使 native 类型与 .NET 兼容。这会破坏目的。因此,虽然编译器可以为 native 类型生成元数据,但它对 C# 没有用。相反,它允许您将 .NET 兼容的类和 native 类型一起包含在同一个 DLL 中,并在它们之间进行无缝的内部调用。

回答您的另一个问题“我怎样才能找出在任意 .NET 程序集中定义了哪些命名空间?”使用程序集查看器/反编译器,例如 dotPeek、.NET Reflector 等。

关于c++ - 在C#项目中,如何引用用C++编写并用/clr编译的项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17223183/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com