Предварительно: вызывающий является собственным EXE-файлом, который предоставляет тип архитектуры "плагина". Он предназначен для загрузки DLL (по имени, указанному в командной строке arg). Эта DLL должна быть встроенной и экспортировать сигнатуру определенной функции. EXE - это C ++, что не так уж важно, так как EXE - это черный ящик (его нельзя изменить / перекомпилировать). Собственная DLL-библиотека может удовлетворить потребности приложения, полностью реализовав решение непосредственно в указанной DLL-библиотеке. Однако требуется, чтобы реальная работа (таким образом превращая собственную DLL в тонкую оболочку / шлюз) была закодирована в C #. Это приводит меня к 3 вариантам (если есть еще, пожалуйста, поделитесь):
- Собственная DLL загружает C ++ / Cli DLL, которая внутренне использует библиотеку классов C #
- Собственная DLL взаимодействует с C # COM-объектом через CCW
- Собственная DLL-библиотека размещает CLR и выполняет вызовы сборки C #
Еще одно требование заключается в том, что не только нативной DLL нужен способ отправки сообщений (функций вызова) на C #, но и C # должен иметь возможность инициировать события / обратный вызов в нативную DLL, когда происходят некоторые необычные вещи ( в отличие от выключения и возвращения). Теперь последнее, что я не знаю, как справиться с третьим вариантом, но это совсем другой вопрос.
Итак, к делу: производительность. Любая информация относительно этих подходов (при условии, что они все соответствуют требованиям)? Из моего исследования я понимаю, что 2 будет иметь больше издержек, чем 1, но я не уверен на 100%, поэтому я здесь. Что касается 3, у меня просто нет никакой информации.
Так что, если кто-то имел дело с этим (или знает другой элегантный вариант), пожалуйста, включите.
Спасибо!