C ++ Wrapper Native Interop Enterprise Scale - PullRequest
       7

C ++ Wrapper Native Interop Enterprise Scale

1 голос
/ 18 ноября 2009

Я хочу знать, как лучше всего обернуть огромную библиотеку, написанную на C ++, чтобы сделать ее доступной в C #.

Я уже работал с interop, и мне нравится IJW. Но я не уверен, как реализовать этот подход с огромной библиотекой. Мне интересно, есть ли какой-нибудь шаблон для использования, в противном случае мне просто нужно написать обертку вокруг каждого класса, который существует в библиотеке c ++, который на самом деле не поддается управлению.

Кроме того, я не могу просто предоставить единый фасад в библиотеку, поскольку, опять же, он очень большой и подавляющий, поэтому любые идеи будут высоко оценены.

Ответы [ 2 ]

0 голосов
/ 29 декабря 2009

Я прошел через процесс, похожий на то, что вы описываете. В нашей ситуации не было простого способа обернуть классы (IJW не является работоспособным решением для большой библиотеки C ++), поэтому мы сделали обтекание каждого класса.

Сначала мы написали обертку вокруг основных классов, которые нам нужно было использовать в нашем приложении, и добавили обертки для других классов по мере необходимости. Эти вещи, в частности, помогли нам:

  • В нашем слое-оболочке мы интенсивно использовали макросы для перевода перевода между кодом C ++ и концепциями .NET. например, макросы использовались для перевода методов типа «свойство» в настоящие свойства .NET.
  • Мы всегда выставляли собственный класс C ++ как IntPtr, используя «свойство IntPtr NativeObject {get ();}». Это позволило нам разделить оболочку на несколько компонентов, в то же время позволяя объектам оболочки передавать собственные объекты друг другу.
  • Тщательный набор тестовых комплектов для проверки работоспособности.

Требуется много работы, но написать обертку вокруг каждого класса можно , но (очевидно) это того стоит, если вы получаете достаточную выгоду. Написание оболочки «вручную» также дало нам детальный контроль над взаимодействием, что было необходимо для успеха нашего проекта.

0 голосов
/ 18 ноября 2009

Если производительность является главной задачей, оставайтесь IJW. Если вам нужно писать классы-обертки или вы предпочитаете больше читабельности в своем коде, я предлагаю вам создать обертки COM, так как есть мастер IDE, который поможет вам в генерации кода, и COM также может использоваться нативными клиентами. Вот как Microsoft предоставляет свои API для Office и IE.

...