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