Используйте библиотеку Mono.NET в Linux - PullRequest
3 голосов
/ 09 сентября 2010

Прежде всего, я хотел бы отметить, что у меня нет опыта использования Mono.NET, так что терпите меня, если вопросы глупы.

Я работаю над приложением, написанным на собственном коде C ++ и работающим в Windows (VS2008) и Linux / Mac (gcc). Я хочу интегрировать библиотеку, которая в настоящее время скомпилирована в MS.NET (версия 2.x).

Я исследовал и обнаружил, что могу звонить в библиотеку, используя интерфейс CCW, который предоставляет MS. Следовательно, в Windows не должно быть слишком много проблем реализации.

У меня вопрос: если мне удастся скомпилировать библиотеку с Mono .NET в Linux или Mac, как мне вызвать этот код из моего собственного приложения? Я предполагаю, что более короткий вопрос может быть: возможно ли компилировать библиотеки с помощью компилятора Mono, который можно вызывать из собственного кода C ++ на платформах, отличных от Windows?

Спасибо!

1 Ответ

5 голосов
/ 09 сентября 2010

Да, но вам придется вставлять 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 # с макетами, соответствующими структурам хоста, и запись непосредственно в структуры хоста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...