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++
如何使用 C++/CLI Wrapper 将变量参数从托管传递到非托管?