Я подумываю о портировании приложения на C / C ++ в C ++ и CLI.
В основном я хотел бы использовать потенциал рефлексии, сериализации XML и вообще все функции в .NET Framework, предлагаемые Microsoft (возможно, даже в моно).
В рассматриваемом проекте интенсивно не используется STL, а объекты приложения в основном размещаются статически.Много кода написано на C, другой был реализован на C ++.
Проблема в том, что код очень, очень, очень «длинный»: это проблема времени, необходимого для преобразования существующего кода, чтобы он работал правильно.
Я пытался создать проект C ++, скомпилированный с флагом в / clr, в конце концов все было не так плохо.Вы можете сохранить свой существующий код C ++, но в то же время использовать классы «управляемый», даже в состоянии получить доступ к «управляемым» объектам из методов класса C ++.
Недостатки, которые я обнаружил очень мало, но заставляют меня озадачиться этой «миграцией» ...
Чтобы воспользоваться преимуществами сериализации данных с использованием отражения, все мои структуры данных должны управляться.Неуправляемый класс не может объявлять поля в соответствии с типом управляемого класса.Чтобы решить эту проблему, если класс преобразован так, что он управляется сборщиком мусора, каждый класс, который объявляет член этого типа, также должен быть управляемым.
С какими трудностями можно столкнуться во время введения управляемых классов?
Ну, я думаю о:
- Управление строками (я не хочу вызывать AllocaHGlobal дляконвертировать System.String в char * каждый раз, когда мне это нужно (например, в качестве параметра функции)
- Управление массивами (преобразование классических массивов в cli :: array)
- (уже упоминалось) смешивание управляемых и неуправляемых классов
- обработка исключений
- создание дампа сбоя (ядра) как это влияет
- ... любая другаячто я еще не думал ...