C++/CLI 为啥对托管不可见

Posted

技术标签:

【中文标题】C++/CLI 为啥对托管不可见【英文标题】:C++/CLI why invisible from managedC++/CLI 为什么对托管不可见 【发布时间】:2012-05-25 00:46:38 【问题描述】:

我有 c++ dll,我正在转换为 c++/cli。 设置 /clr 编译器选项后,我的项目构建良好。 但是,当我尝试通过引用 c# 项目中的 dll 来引用本机方法时,c# 项目无法找到它。 不设置 /clr 将所有源代码构建为 MSIL 应该从其他 .net 程序集中可见吗? 为什么我必须创建一个 c++/cli 包装类才能使原生代码对 c# 代码可见?

我不清楚 c++/cli 是如何工作的......

【问题讨论】:

【参考方案1】:

/clr 不会使您的本机类对托管代码可见,也不会将所有内容编译为托管代码。它只是允许您将托管代码添加到您的 C++ 项目中。这是通过 C++/CLI 语言扩展完成的(即:制作 ref class 而不是标准的 class)。

/clr:pure 标志确实将所有内容编译为托管代码(非本机代码),但需要对源代码进行重大更改才能进行编译。

【讨论】:

以上是关于C++/CLI 为啥对托管不可见的主要内容,如果未能解决你的问题,请参考以下文章

C++/CLI:从模板类继承的函数在 C# 中不可见

使用 C++/CLI 包装器将二维数组从 C# 传递到非托管 C++

如何使用 C++/CLI Wrapper 将变量参数从托管传递到非托管?

用 C++/CLI 包装非托管 C++ - 一种正确的方法

C++/cli 错误 C4368:无法将“列表”定义为托管“队列”的成员:不支持混合类型

将非托管方法作为回调传递给托管 C++/CLI 类