Библиотека C # и C ++ - PullRequest
       16

Библиотека C # и C ++

5 голосов
/ 23 мая 2010
  • Мне было интересно, могу ли я использовать библиотеку - , написанную на C ++ - в C #
  • Проблема в том, чтоБиблиотека имеет свои собственные структуры и классы. Смогу ли я использовать ее в C #?

Спасибо

EDIT Эта библиотека с открытым исходным кодом ..поэтому, если моим требованиям нужно что-то особенное в коде C ++, я смогу это сделать ...

Ответы [ 3 ]

3 голосов
/ 23 мая 2010

Другой вариант - написать управляемую оболочку на C ++ / CLI. Я предпочитаю это вместо использования P / Invoke.

3 голосов
/ 23 мая 2010

Вы не можете напрямую использовать классы C ++ в управляемом коде. Главные проблемы заключаются в невозможности использовать тот же распределитель памяти, который используется в коде C ++, и в невозможности простого вызова конструктора и деструктора. Сотрудник Microsoft опубликовал сообщение в блоге , чтобы показать, что это не невозможно. Я бы не рекомендовал это делать.

COM - это решение, но оно неизменно требует довольно большого переписывания и хороших навыков программирования COM. * Оболочка управляемого класса на языке C ++ / CLI обычно является лучшим решением. Вы можете взглянуть на SWIG tool , чтобы рассмотреть возможность автоматической генерации этих классов-оболочек. Однако помните, что этот инструмент может легко создать больше проблем, чем решает.

3 голосов
/ 23 мая 2010

Есть два способа, оба с помощью адаптера (который сопоставляет классы C ++ с классами .NET):

  • C ++ / CLI
  • COM

Первый не использует COM, и большая часть кода C ++ может быть скомпилирована с правильными ключами.

Дополнительно: теоретически P / Invoke может быть возможен, но вся семантика C ++ будетпотерян, вам нужно будет обрабатывать время жизни объекта C ++ вручную (и ссылки на экземпляры как IntPtr).Плюс, конечно, вам нужно будет назвать искаженные имена ...

...