Не удается получить доступ к классу / пространству имен C ++ из C # в VS 2010 SP1 - PullRequest
1 голос
/ 27 января 2012

Это с Visual Studio 2010, SP1.У меня есть класс C ++ в отдельном проекте C ++, к которому я хочу получить доступ и использовать в C # из другого проекта (оба живут в одном решении).Я ссылался на мой C ++ проект из C #.Я строю свой проект C ++, используя опцию / clr.Я создал управляемую версию класса C ++, которая вызывает соответствующий родной класс C ++.

Когда я щелкаю правой кнопкой мыши ссылку на свой проект C ++ из моих «Ссылки» моего проекта C # и нажимаю «Просмотр в объекте»Браузер ", мой проект на C ++ существует как часть списка объектов, и я могу открыть его и увидеть свой класс, пространство имен и т. Д., Которые я пытаюсь использовать.

Однако из кода C #, когда япопробуйте сделать "использование", это не является частью списка автозаполнения пространств имен, и на самом деле это дает ошибку компиляции, если я набираю пространство имен C ++.«Ошибка 1 Не удалось найти тип или имя пространства имен« MyCppClass »(отсутствует директива using или ссылка на сборку?)»

И ответ на этот вопрос - нет, я не пропускаюиспользуя директиву или ссылку на сборку, как описано выше.Кроме того, мои классы C ++ не существуют в пространстве имен по умолчанию, они просто не существуют во вселенной моего проекта C #.

Итак ... что я делаю не так?

1 Ответ

0 голосов
/ 26 февраля 2012

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

В конце концов я понял, что вам нужно добавить свой класс COM в качестве ссылки на ваш проект .net вместе с классом-оболочкой .net.Я создал c ++ COM dll и использовал tlbimp для создания оболочки .net.Затем я добавил обертку в свой проект и пошел добавлять ссылки на вкладке COM, там была моя COM-сборка, поэтому я тоже добавил ее, и мой проект скомпилирован и работает нормально.

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