Какой лучший способ сделать это ....?
У меня есть некоторый собственный код C ++, который использует много вызовов Win32 вместе с байтовыми буферами (выделенными с помощью HeapAlloc). Я хотел бы расширить код и создать графический интерфейс C # ... и, возможно, позже использовать базовый графический интерфейс Win32 (для использования там, где нет поддержки .Net и ограниченной поддержки MFC).
(A) Я мог бы просто переписать код на C # и использовать несколько PINVOKEs .... но даже с PINVOKES в отдельном классе код выглядит беспорядочным со всем маршалингом. Я также переписываю много кода.
(B) Я мог бы создать собственную C ++ DLL и использовать PINVOKE для компоновки собственных структур данных. Я предполагаю, что могу включить нативную C ++ DLL / LIB в проект с использованием C #?
(C) Создание DLL в смешанном режиме (собственный класс C ++ плюс управляемый класс ref). Я предполагаю, что это облегчит использование управляемого класса ref в C # ...... но так ли это? Будет ли управляемый класс обрабатывать весь маршалинг? Могу ли я использовать эту DLL в смешанном режиме на платформе без .Net (т.е. по-прежнему иметь доступ к собственному неуправляемому компоненту C ++) или я могу ограничиться только платформой .Net.
Одна вещь, которая беспокоит меня в каждом из этих вариантов, это все сортировка. Лучше ли создать управляемую структуру данных (массив, строку и т. Д.) И передать ее в собственный класс C ++ или наоборот?
Любые идеи о том, что считается лучшей практикой ...?
UPDATE:
Я знаю, что могу переписать собственный код C ++ с нуля, но это означает дублирование кода и не позволяет мне легко повторно использовать любые обновления кода с любым приложением Win32. Что меня больше всего беспокоит, так это лучший способ сопоставить различные данные между управляемым и неуправляемым миром. Для меня DLL в смешанном режиме выглядит наиболее гибким вариантом, но я бы хотел по-другому взглянуть на возможные подводные камни.