Как обернуть класс C ++ с C ++ / CLI - PullRequest
3 голосов
/ 05 марта 2012

Итак, я пытаюсь понять совместимость между C ++ и C # с помощью C ++ / CLI, создавая оболочку C ++ / CLI для неуправляемого класса C ++, это необходимо, потому что мне нужно несколько экземпляров моего класса C ++ в C #app.

Я создал библиотеку классов CLR, которая использует pimpl, чтобы скрыть неуправляемый класс, подобный этому

http://msdn.microsoft.com/en-us/library/ms235281.aspx

Я думал, что создание этого проекта приведет к.lib файл, но все, что выводится в папке релиза - это DLL.Я немного сбит с толку, так как меня убедили, что вы не можете экспортировать класс в C ++ / CLI и что я просто сошлюсь на вывод файла .lib в моем проекте библиотеки классов CLR.Я могу только предположить, что я создал неправильный вид проекта, но, похоже, не так много документации по этому виду вещей.

Спасибо.

Ответы [ 2 ]

3 голосов
/ 05 марта 2012

То, что я делал в прошлом, очень похоже на статью MSDN

Создайте класс C ++ и убедитесь, что для параметров компилятора для этого файла cpp установлено значение «No Common Language RunTime Support»

Затем используйте pimpl для ссылки на этот класс C ++ в классе C ++ / CLI, убедившись, что в этом файле cpp включена поддержка Common Language RunTime Support (/ clr).

Выводом будет библиотека DLL, которую вы можете использовать в существующем коде .NET.

Из опыта я убедился бы, что интерфейс, который вы создаете в классе-оболочке, имеет только double, int и т. Д., А нессылаться на любые классы C ++.

@ Билл, чтобы использовать эту DLL-оболочку в некотором коде C #, просто добавьте ссылку на DLL с помощью «Добавить ссылку».Вы сможете вызывать все общедоступные функции так, как вы ожидаете.

3 голосов
/ 05 марта 2012

В результате получается .Net Assembly, которая содержит некоторый нативный код. Если вы хотите поместить свой собственный код в статическую библиотеку, а затем связать его с этой сборкой, то это тоже сработает.

Но, в конце концов, если вы хотите включить свой код в приложение .Net (c #), то интерфейс .Net к нему должен находиться в сборке (.dll).

...