Прямой доступ к управляемому API
Если неуправляемый клиент написан на C ++, его можно скомпилировать с помощью Visual Studio .NET C ++Компилятор как «изображение в смешанном режиме».После этого неуправляемый клиент может получить прямой доступ к любому управляемому API.Однако некоторые правила кодирования применяются для доступа к управляемым объектам из неуправляемого кода;обратитесь к документации C ++ для получения более подробной информации.
Прямой доступ является предпочтительным вариантом, поскольку он не требует какого-либо особого внимания со стороны разработчиков управляемого API.Они могут разрабатывать свои управляемые API в соответствии с руководящими принципами разработки управляемых API (DG) и быть уверенными в том, что API по-прежнему будут доступны для неуправляемых абонентов.
Предоставление управляемого API в качестве COM API
Каждый общедоступный управляемый класс может быть доступен неуправляемым клиентам через COM-взаимодействие.Этот процесс очень прост в реализации, потому что уровень взаимодействия COM заботится обо всей COM-сантехнике.Таким образом, например, каждый управляемый класс, по-видимому, реализует IUnknown, IDispatch, ISupportErrorInfo и несколько других стандартных интерфейсов COM.
Несмотря на то, что представление управляемых API-интерфейсов в качестве COM-API является простым, управляемые и объектные модели COMОчень разные.Следовательно, предоставление управляемого API для COM всегда должно быть явным дизайнерским решением.Некоторые функции, доступные в управляемом мире, не имеют аналогов в мире COM и не могут быть использованы клиентами COM.Из-за этого часто возникают противоречия между рекомендациями по разработке управляемого API (DG) и совместимостью с COM.
Если важны клиенты COM, напишите свой управляемый API в соответствии с рекомендациями по разработке управляемого API, а затем напишите тонкийУдобная для COM управляемая оболочка вокруг вашего управляемого API, которая будет доступна для COM.
Представление управляемого API в виде плоского API
Иногда неуправляемые клиенты не могут использовать COM.Например, они могут быть уже написаны для использования плоских API и не могут быть изменены или перекомпилированы.C ++ является единственным языком высокого уровня, который позволяет вам представлять управляемые API как простые API.Сделать это не так просто, как представить управляемый API как COM API.Это очень продвинутый метод, который требует глубоких знаний взаимодействия C ++ и различий между управляемым и неуправляемым миром.
Представьте управляемый API как плоский API, только если это абсолютно необходимо.Если у вас нет выбора, обязательно ознакомьтесь с документацией C ++ и полностью осознайте все ограничения.