【发布时间】: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 不友好的东西,那么有什么办法可以阻止这种情况发生吗?
编辑:我今天学到的东西:
- 对象浏览器会显示解决方案中的所有命名空间,而不是恰好在您正在查看的任何项目中。
- 原生 C++ 类不在托管程序集中公开。
【问题讨论】:
-
您的对象浏览器设置是否设置为显示内部类?本机类不应该被编译器标记为公共的吗?
标签: .net visual-studio visual-c++ c++-cli