繁体   English   中英

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

[英]In a C# project, how can I refer to a project written in C++ and compiled with /clr?

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

非常感谢!

ROBR

/clr开关使您可以将.NET类型( ref classinterface class )与其他C ++代码混合在一起。 它并没有神奇地使本地C ++代码可用于C#。

除其他原因外,C ++代码在很大程度上依赖于保持不变的对象地址,但在.NET中则并非如此。 .NET要求所有对象都具有一个v表,以便垃圾回收器可以找出对象是什么数据类型(以及对象指针在其中的位置),但是大多数本机类型根本没有v表。 在不更改布局和破坏与本机代码的兼容性的情况下,编译器无法使本机类型与.NET兼容。 这会失败的目的。 因此,尽管编译器可以为本机类型生成元数据,但对于C#而言却没有用。 相反,它使您可以将.NET兼容类和本机类型一起包含在同一DLL中,并在它们之间进行内部无缝调用。

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

您需要使用C ++编写托管包装类。 检查此msdn文章

实际上,您不需要将整个dll编译为/ clr,而只需将托管包装程序编译为。 并非所有的c ++代码都可与/ clr一起使用,并且速度适中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM