Собственное пространство имен экспортируется в проект C ++ / CLI? - PullRequest
0 голосов
/ 20 сентября 2010

Я упаковываю нативную библиотеку 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 s и другие недружественные .NET вещи, так есть ли способ предотвратить это?

Редактировать: То, что я узнал сегодня:

  1. Обозреватель объектов показывает все пространства имен в решении, а не только в каком-либо проекте, который вы просматриваете.
  2. Собственные классы C ++ не доступны в управляемых сборках.

1 Ответ

1 голос
/ 21 сентября 2010

Скорее всего, нативные классы перечислены в метаданных для удобства управляемых отладчиков, но они должны быть помечены internal и не могут использоваться пользовательским кодом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...