Как преобразовать нативные объекты C ++ в управляемый CLI C ++ - PullRequest
0 голосов
/ 26 октября 2010

У меня есть набор нативных объектов и классов C ++, которые содержат карты DTL, карты карт, списки и векторы.

Мне нужно вызывать управляемые функции C ++ из собственного кода C ++ и передавать эти собственные объекты и контейнеры STL (списки, карты, карты карт) в C ++ / CLI. Нужно маршал или как-то сериализовать эти объекты. Как я могу сделать это без каких-либо проблем. Так что после сортировки и сериализации обратно в управляемый C ++ / CLI карты должны быть упорядочены со словарями и словарями словарей, stl list с управляемого List <> и т. Д.

как мне добиться этого во всех случаях? Требуется ли комплексная обработка вопросов сортировки ...?

С уважением Усман

1 Ответ

1 голос
/ 26 октября 2010

Структура памяти STL зависит от конкретной реализации. Например. sizeof (std :: vector) - 16 в выпуске и 20 в режиме отладки, когда вы используете реализацию, поставляемую с Visual C ++. И у вас есть указатели в классах STL, которые не могут быть значимым образом перенесены в управляемую память. Вы можете переключиться на независимые от платформы типы C или COM в интерфейсе (например, передать массив с параметром count или безопасным массивом), если хотите выполнить маршалинг, поскольку .Net лучше понимает эти типы. Я рекомендую COM, потому что он имеет более богатые типы и поддерживает другие языки, если вам это нужно.

В качестве альтернативы, если вам нужна скорость, вы можете написать шаблонную функцию marshal_as для выполнения преобразования, чтобы вы могли повторно использовать код маршалинга или даже буфер маршалинга, или написать управляемую оболочку для ваших объектов C ++ .

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

...