Обертка C # вокруг неуправляемого C ++ - PullRequest
0 голосов
/ 11 ноября 2011

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

Например, у меня есть довольно много классов, написанных на неуправляемом C ++, которые я хочу использовать через .NET (в идеалес VBA в Excel).До сих пор я использовал управляемый C ++ / CLI, но заметил некоторые странности с языком, которых я бы предпочел избежать.Читая дальше, кажется, что я мог бы обернуть мой неуправляемый C ++ в C # и затем иметь прямой доступ к .NET (при этом полностью избегая управляемого C ++ / CLI).Возможно ли это, и если да, то как лучше это сделать?Спасибо за помощь.

Ответы [ 2 ]

1 голос
/ 11 ноября 2011

Если вы хотите полностью избежать C ++ / CLI и использовать чистый C # для доступа к своему нативному коду, то это должно быть сделано через прямой P / Invoke, метод за методом. Это почти наверняка не идеально, если у вас большой объем неуправляемого кода.

Лично я думаю, что «лучшим» решением будет продолжение использования C ++ / CLI для написания управляемых оболочек вокруг вашего нативного кода, которые предоставляют простейшие общедоступные интерфейсы для уменьшения сложности.

1 голос
/ 11 ноября 2011

У вас есть три варианта:

  • Использовать оболочку C ++ / CLI.Идеальное решение, если вы ориентируетесь на .NET.Вы можете получить доступ ко всему из мира .NET.Вы можете обернуть свою библиотеку C ++ ею, а затем использовать ее из C # / любой другой.
  • Ditch .NET и создать оболочку COM, возможно, с помощью ATL.Это немного сложнее, но вы можете проще вызывать свой код из VBA / Excel.Вы по-прежнему сможете вызывать ваши COM-классы из .NET, если хотите.
  • Скомпилируйте ваш код как собственную DLL и используйте P / Invoke из C #.Обратите внимание, что это решение, в лучшем случае, утомительно, поскольку ничего не происходит автоматически.

Если ваша цель на самом деле Excel / VBA, поскольку вы все равно собираетесь создавать объекты COM, я бы выбрал вариант 2 исоздавать COM-классы напрямую, используя ATL.Хотя это полностью обходит .NET, но использование .NET для взаимодействия между кодом C ++ и Excel всегда было для меня хлопотом.

...