Импорт собственного класса c ++ в проект CLI

Я нахожусь в процессе создания проекта CLI, чтобы обернуть существующий собственный проект C ++ (два отдельных проекта в одном файле решения). Я хотел бы включить указатель на собственный класс в качестве члена управляемого класса. Из документации, которую я прочитал в Интернете, это можно сделать, если и управляемый, и неуправляемый код находятся вместе в одном проекте. Если собственный и управляемый код находятся в отдельных проектах, то единственный вариант - использовать атрибуты dllimport и dllexport между двумя проектами и экспортировать функции класса машинного кода как статические функции.

Это мои единственные варианты, или я могу импортировать и экспортировать весь собственный класс между двумя отдельными проектами? Я спрашиваю, потому что это определяет, как я проектирую свою управляемую оболочку. Заранее спасибо.


person John    schedule 28.03.2011    source источник


Ответы (1)


Ну слово "указатель" меня на минуту забросило. Вы имеете в виду, что хотите использовать собственный код из кода C ++ / CLI без P / Invoke? Конечно. Просто включите заголовок, ссылку на библиотеку. Именно так, как бы вы поступили, если бы они оба были родными. Сейчас это называется C ++ Interop - мне больше нравится старое название (It Just Works Interop).

Вы, конечно, можете включить заголовок откуда угодно и добавить ввод компоновщика откуда угодно, поэтому технически они не обязательно должны быть в одном и том же .sln, но Visual Studio сделает вашу жизнь немного проще, если они есть.

person Kate Gregory    schedule 28.03.2011
comment
Также помогает, если собственный проект настроен на создание статического .lib вместо DLL. В противном случае вы можете легко столкнуться с такими проблемами, как выделение памяти из одной кучи CRT и попытка освободить ее из другой. И иногда стоит активировать опцию Link library sources, поскольку при связывании со статической библиотекой не будут запускаться глобальные конструкторы в объектах, которые в противном случае не нужны. Он просто работает (если вы осторожны, но это намного проще, чем p / invoke. - person Ben Voigt; 29.03.2011
comment
Это хорошо знать. Мой собственный код - это dll, а не статическая библиотека. - person John; 29.03.2011
comment
Вы можете заставить VS сделать вам удобную библиотеку, на которую вы можете ссылаться из вызывающего проекта. - person Kate Gregory; 29.03.2011
comment
У вас есть ссылка на то, как сделать удобную библиотеку? - person John; 29.03.2011
comment
По-видимому, в этом веке они называются библиотеками импорта - см. stackoverflow.com/questions/584041/ - person Kate Gregory; 29.03.2011