У меня есть приложение C #, которое получает сериализованные данные в виде текста из приложения C ++ (данные были сериализованы в C ++ с использованием библиотеки BOOST). Теперь сериализованные данные на самом деле являются объектом, который мне нужно преобразовать в аналогичный объект .Net Object.In чтобы добиться этого, мне сказали, что я мог бы написать компонент C ++ / CLI в виде dll, который мог бы десериализовать текстовые данные (используя ту же библиотеку, которая использовалась для его сериализации) и передать их обратно в приложение C #.
У меня нет опыта программирования на C ++ / CLI, но у меня нет проблем с программированием на C ++. Но я не думаю, что C ++ / CLI будет сложно заполучить. У меня вопрос, я не понимаю, как создание приложения C ++ / CLI передаст объект обратно в C #? Любые советы, учебники, ссылки будут с благодарностью
Редактировать отправляемый объект в C ++ примерно так
class person
{
public:
person()
{
}
person(int age) : age_(age)
{
}
int age() const
{
return age_;
}
private:
friend class boost::serialization::access;
template <typename Archive>
void serialize(Archive &ar, const unsigned int version)
{
ar & age_;
}
int age_;
};
Вы должны почитать пространство имен System.Runtime.InteropServices.Marshal
Вот отличная статья о том, как собрать двоичные данные — структуры в структурах c #.
http://www.codeproject.com/Articles/66243/Marshaling-with-C-Chapter-3-Marshaling-Compound-Ty
Вот ссылка на тип —
http://www.codeproject.com/Articles/66244/Marshaling-with-C-Chapter-2-Marshaling-Simple-Type
Это называется маршаллингом, при котором вы читаете двоичные или текстовые данные в структурах или сложных типах, используя C #.
Несколько вещей, которые вы должны рассмотреть здесь, это упаковка и выравнивание структур. поиск этих терминов даст очень полезные результаты
Я могу ошибаться, но разве не весь смысл XML в том, что он не зависит от платформы и языка? Пока вы получаете C # класс отражает структуру данных в файле XML
(то есть он имеет переменную int age_), у вас не должно возникнуть проблем с использованием обычного синтаксического анализатора файлов XML в C # для его десериализации. Тот факт, что файл XML был написан приложением C ++, не более важен, чем если бы вы написали его вручную.