Да, но вам придется вставлять Mono . Ваше нативное «хостовое» приложение должно было бы инициализировать среду выполнения Mono, затем найти и выполнить MonoMethods для объектов MonoObjects.
Обратите внимание, что из-за P / Invoke намного проще вызывать C API (т.е. с extern "C"
, если вы используете C ++) из Mono, чем вызывать Mono-код из C. Так что лучше всего Стратегия IMO - создать небольшую «склеивающую» библиотеку C #, которая выполняет большую часть взаимодействия и предоставляет более простой API для вашего кода C ++.
Например, вы можете структурировать его так, чтобы хост мог вызывать статический метод в библиотеке glue, который затем создавал бы и управлял объектами из библиотеки, которую вы используете, и делал обратные вызовы в собственный хост, используя P / Invoke.
Есть также несколько приемов, которые вы можете использовать с «небезопасным» кодом в C # для упрощения вещей - например, хост может передавать значения IntPtr (указатели) в библиотеку C # glue, а затем в небезопасном контексте C # вы можете приводить их указатели на структуры C # с макетами, соответствующими структурам хоста, и запись непосредственно в структуры хоста.