在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项目中,我选择了Add Reference,选择了project选项卡,然后选择了DLL项目。它被成功地作为参考添加到我的WinForm项目中。但是,我在使用DLL时遇到了麻烦。我想为它添加一个使用指令,但我不知道DLL有什么名字。我尝试使用与文件相同的名称,但它不起作用。我怎么知道它的名字是在using指令中使用的?
非常感谢!
RobR
/clr
开关允许您将。net类型(ref class
, interface class
)与其他c++代码混合。它不会神奇地让本地c++代码在c#中可用。
在其他原因中,c++代码严重依赖于对象地址保持不变,但在。net中,它们不是。net要求所有对象都有一个v-table,以便垃圾收集器可以找出对象是什么数据类型(因此包含对象指针的位置),但大多数本机类型根本没有v-table。如果不改变布局和破坏与本机代码的兼容性,编译器就无法使本机类型与。net兼容。这就违背了目的。因此,虽然编译器可以为本机类型生成元数据,但它对c#没有用处。相反,它允许您将。net兼容的类和本机类型一起包含在同一个DLL中,并在它们之间无缝地进行内部调用。
要回答您的其他问题"我如何发现在任意。net程序集中定义了哪些名称空间?"使用程序集查看器/反编译器,如dotPeek, . net Reflector等
您需要用c++编写托管包装器类。查看这篇msdn文章
实际上你不需要将整个dll编译为/clr,只需要编译托管包装器。并不是所有的c++代码都可以在/clr下工作,并且会有一定的减速。
- C++项目编译强制使用 /clr 选项,尽管在没有公共语言运行时支持的情况下执行它
- 在我的 CLR 项目中添加包含会导致无法在启用 /clr 的情况下编译 WLR
- 如何解决在 clr 项目的特定文件中写入数据的问题?
- Visual C CLR设计器在项目的第二次运行和编辑设计中始终显示0x8000000A错误
- C,如何将多维数组传递给CLR/类库项目中的函数
- visual在C++/CLR项目中使用C++DLL库项目
- MFC和 /CLR C 项目中的库
- 在 Visual Studio 2012 中编译启用 CLR C++项目时出现 C2248 错误
- LNK1112在 Directshow C++ CLR 项目上
- VC++ CLR 2012 项目的依赖项
- LPCSTR 在 CLR 项目中创建未声明的变量
- VC++在解决方案中从非/clr项目的函数调用/clr工程的函数
- 代码在CLR项目中有效,但在Win32中无效
- 链接CLR控制台项目中的C++/CLI库
- 调用我的CLR项目时,KernelBase.dll出现未处理的异常
- 在c#项目中,如何引用用c++编写并使用/clr编译的项目?
- 将本机编译的c++ DLL添加到CLR c++项目中
- 从混合模式c++项目中的CLR-to-SEH异常中获取明智的信息
- 我在Visual Studio 2012 Pro中有一个C++DLL类型的项目,但我无法将其编译为CLR - 为什么会这样?
- 将CLR项目迁移到VS 2015会抛出C2869编译器错误