Это довольно просто и хорошо работает. Это намного проще, чем PInvoke.
Главное, на что нужно обратить внимание, это отсутствие каких-либо неуправляемых членов в управляемых заголовках, в том числе закрытых членов, сигнатур методов и т. Д. Вполне нормально иметь закрытые члены, указывающие на управляемые типы, просто используйте forward объявления для ваших классов.
Также следите за временем жизни объекта. Утечки памяти легко представить, так как многие программисты .NET не привыкли убирать за собой. Убедитесь, что все создаваемые вами классы-оболочки являются одноразовыми, если они содержат указатели, и убедитесь, что вы избавляетесь от них в своем управляемом коде. Синтаксис для IDisposable в управляемом C ++ также странный, но он есть в документации.
Кроме того, помните, что каждый раз, когда вы пересекаете управляемую / неуправляемую границу, вы получаете небольшой удар, поэтому постарайтесь соответственно спланировать свой интерфейс. Если что-то вызывается в циклах несколько раз, вероятно, лучше переместить этот цикл через границу, чтобы вы пересекались только один раз. Не беспокойтесь об этом, если только вы не говорите миллионы звонков.
Эта статья идет другим путем, но в ней есть несколько полезных моментов.
Используйте нашу библиотеку ManWrap, чтобы получить лучшее из .NET в родном коде C ++
Смотри также
Управляемый код в Visual Studio 2005 и
Удаление управляемых объектов, упаковка библиотеки и многое другое