【问题标题】:Native namespace exported in C++/CLI project?在 C++/CLI 项目中导出的本机命名空间?
【发布时间】:2010-09-20 19:46:23
【问题描述】:

我正在包装一个本地 C++ 库以供 CLR 使用。但是,我遇到了一个奇怪的……问题?

本机库的标头如下所示:

namespace Foo {
    class Bar {
    public:
        Bar();

        //etc...

    };
}

所以,要使用这个类,我有自己的类定义:

#include "Foo/Bar.h"

namespace FooNet {
    public ref class Bar {
    private:
        Foo::Bar * m_Impl;

    internal:
        Bar(Foo::Bar *);

        //etc...

    };
}

而且,这一切都很好。但是,当我将生成的程序集引用到 C# 项目中(例如)并查看对象浏览器时,我注意到它包含 not 仅我的 CLR 类 (FooNet::Bar),但是还有原生类(Foo::Bar

我并不是特别热衷于公开原生类,因为它们使用指针和std::strings 以​​及其他对 .NET 不友好的东西,那么有什么办法可以阻止这种情况发生吗?

编辑:我今天学到的东西:

  1. 对象浏览器会显示解决方案中的所有命名空间,而不是恰好在您正在查看的任何项目中。
  2. 原生 C++ 类在托管程序集中公开。

【问题讨论】:

  • 您的对象浏览器设置是否设置为显示内部类?本机类不应该被编译器标记为公共的吗?

标签: .net visual-studio visual-c++ c++-cli


【解决方案1】:

为了托管调试器的利益,本机类很可能列在元数据中,但它们应标记为internal,并且不能被消费者代码使用。

【讨论】:

  • 哦,哇,我觉得自己很愚蠢。测试项目是与 C++/CLI 库相同的解决方案的一部分,因此它当然显示了两者。
猜你喜欢
  • 2021-02-26
  • 1970-01-01
  • 2011-07-24
  • 1970-01-01
  • 1970-01-01
  • 2012-10-17
  • 1970-01-01
  • 2016-08-29
  • 2022-11-12
相关资源
最近更新 更多