Я пытаюсь понять мои варианты вызова реализации библиотеки C# из неуправляемого C++.C++ COM C# Interoperation смешанного режима
Мой модуль верхнего уровня - это неуправляемая DLL C++ COM/ATL. Я хотел бы интегрировать функциональные возможности существующей управляемой C# dll. Я имею и могу перекомпилировать источник для обеих библиотек.
Насколько я понимаю из чтения статей, таких как this overview на MSDN и this SO question, возможно создание «смешанного режима» dll, которое позволяет использовать собственный C++-код в библиотеке C#.
У меня есть несколько вопросов об этом подходе:
- Как идти о создании это? Могу ли я просто изменить некоторые свойства на существующий проект COM/ATL на , разрешить использование модулей C#?
- Как эти смешанные вызовы отличаются производительностью от COM-взаимодействия звонки? Есть ли общая строка формат, который может использоваться для предотвращения преобразования между модулями?
- Если эта длл создается смешанного режима, это может все еще быть сопрягаемые/используется таким же образом, с помощью своих COM клиентов, или же они должны быть режим известно смешано?
- Включение CLR накладывает существенные накладные расходы при загрузке этого COM-объекта?
Я новичок в разработке Windows, поэтому, пожалуйста, прокомментируйте, если что-либо в формулировке вопроса нуждается в разъяснении или исправлении.
Заранее спасибо.
Спасибо за отличную информацию. Хотел бы я дать больше, чем один голос. –
Очень предвзятое мнение. COM-вызовы не медленнее. Накладные расходы CLR являются существенными. – wqw
Объясните, как вызов COM не будет медленнее, если он использует соглашение о вызове, которое требует нажатия всех аргументов в стек (без передачи в реестре), в то время как прямые управляемые вызовы C++/CLI с прямым управлением будут использовать «thiscall». Кроме того, при использовании '/ clr', большинство кодов будет скомпилировано в MSIL в первую очередь - как для классов' ref', так и для non -ref', поэтому для входа в DLL будет один управляемый переход на основе native-> оттуда все управляется, без штрафных санкций. Я сказал, что накладные расходы на CLR являются существенными, но как вы избегаете его с помощью COM-взаимодействия (или иначе)? –