Привет, у нас есть проект (библиотека) c ++, который работает с языками .net или может быть другим языком (например, старый vb, но это не очень важно). Существует два варианта: написать COM-упаковщик для проекта или управляемый упаковщик C ++. Какой выбрать?
Например, одним большим преимуществом использования управляемого c ++ является использование классов коллекций .net для передачи в качестве параметров вместо огромной сложности коллекций в COM.
Если ваши COM-коллекции чрезвычайно сложны, вы можете переосмыслить подход к управлению COM-коллекциями. Совершенно другая проблема, но, как говорится …
Ваше упоминание о том, что старый VB не очень важен, более важно для вашего ответа, чем вы думаете. Старый VB не говорит на .NET, но очень хорошо говорит на COM. Если вы предвидите необходимость идти по этому пути, это серьезный толчок в сторону СОМ.
Я не фанат управляемого C ++ только потому, что он самый непереносимый, сложный в управлении, сложный в управлении. читать диалект языка, с которым вы, вероятно, когда-либо столкнетесь. Однако, если основной код в вашей библиотеке достаточно прост, вы, вероятно, сможете запустить его на управляемом C ++ с разумными усилиями. Чем динамичнее библиотека, тем сложнее будет портировать ее на .NET-управление. Тем не мение…
Как только он появится, обертка COM может вернуть вас к вашим COM-клиентам, таким как устаревший VB, без особых проблем, при условии, что вы сделали правильный выбор при работе с портом и обеспечили простоту упаковки.
Это самый общий способ, которым я могу сказать (с огромной болью), что управляемый C ++, вероятно, является вашим лучшим вариантом, но я бы серьезно отругал его перед тем, как бросить эту перчатку.
Термин «оболочка COM» не имеет особого смысла. Если вы хотите создать класс COM, нет причин, по которым вам следует сначала создать класс vanilla C ++, а затем создать класс COM, который обернет его и имитирует. Это одно из преимуществ COM над управляемым C ++: в управляемом C ++ вы ДОЛЖНЫ создать класс vanilla C ++ (для неуправляемых клиентов, если у вас его нет) и класс управляемой оболочки для него (для управляемых клиентов).
На мой взгляд, решающие факторы того, когда вам следует использовать COM или управляемый C ++ для взаимодействия, просты:
Используйте COM, если вы хотите создать совершенно новый неуправляемый класс (не оболочку), который может использоваться клиентами на любом языке.
Используйте управляемый C ++, если хотите создать совершенно новый класс (не оболочку), в котором вы смешиваете много управляемого и неуправляемого кода.
Итак, вы видите, слово «обертка» не должно встречаться нигде в вашем дизайне. Обертки отстой 🙂