Есть ли лучшая практика для доступа к собственным функциям COM C ++ для взаимодействия из C #? - PullRequest
1 голос
/ 23 марта 2009

Есть ли лучший способ для доступа к собственным функциям COM C ++ для взаимодействия из C #?

Например, если у меня есть 100 методов C ++ (в основном нативная библиотека), которые взаимодействуют с основным компонентом окна.

Я хочу, в основном, создать оболочку для этих методов C ++ в C #, чтобы все мои вновь нанятые сотрудники могли использовать это вместо C ++ и т. Д. Код C ++ является устаревшим и пугает меня, поэтому я хочу разобраться с ним только один раз , Подход здесь для каждого метода, чтобы иметь соответствующий метод C #? На самом деле, есть ли другой способ сделать это?

Могу ли я иметь какую-то подсистему оболочки. Как вы, люди, вообще это делаете?

Кроме того, есть ли какие-либо соображения относительно производительности и т. Д.? 1009 *

Ответы [ 2 ]

7 голосов
/ 23 марта 2009

Если ваши методы C ++ находятся в COM-объекте, вы можете использовать COM-взаимодействие из C #. См. CLR Inside Out: Введение в COM Interop для хорошего введения.

Если эти методы C ++ больше похожи на традиционные вызовы API, вам следует использовать Platform Invoke (т.е. PInvoke). Это влечет за собой создание управляемых прототипов в C # для неуправляемых (функции C ++). Хорошее место для начала - учебник по вызовам платформы .

Что касается соображений производительности, то обычно не о чем беспокоиться. Вызов из C # может быть немного медленнее, чем вызов напрямую из C ++, в значительной степени из-за маршалинга данных. Если код, который вы вызываете, не находится в критическом цикле, вы не заметите никакой разницы.

Это действительно зависит от того, что делают эти нативные функции. Чем больше вам приходится делиться данными между неуправляемым и управляемым миром, тем сложнее становится этот процесс. Без дополнительной информации о ваших конкретных функциях трудно сказать, где вы можете столкнуться с проблемами.

1 голос
/ 23 марта 2009

Используйте COM Interop, чтобы обернуть библиотеку. Затем вы можете более или менее рассматривать код C ++ как .NET собственный код, который можно вызывать обычным способом.

...