在C ++ / CLI项目中导出的本机命名空间?

时间:2010-09-20 19:46:24

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

我正在包装一个本地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#项目(例如)并查看对象浏览器时,我注意到它只包含而不是我的CLR类(FooNet::Bar ,还有本地类(Foo::Bar

我对暴露本机类并不是特别热衷,因为它们使用指针和std::string以及其他.NET不友好的东西,所以有什么方法可以阻止这种情况发生吗?

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

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

1 个答案:

答案 0 :(得分:1)

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