Чтение сериализованного массива MFC в C # - PullRequest
1 голос
/ 19 февраля 2012

MFC CArray был сериализован и сохранен в базе данных.Мне нужно прочитать эти данные в проект C #.Я могу получить данные в виде байта [] из базы данных.Затем я записываю байт [] в MemoryStream.Теперь мне нужно прочитать данные из MemoryStream.

Кто-то, по-видимому, решил это раньше, но не написал свое решение.

http://social.msdn.microsoft.com/Forums/eu/csharpgeneral/thread/17393adc-1f1e-4e12-8975-527f42e5393e

Я следил за этими проектами, пытаясь найти решение.проблема.

http://www.codeproject.com/Articles/32741/Implementing-MFC-Style-Serialization-in-NET-Part-1

http://www.codeproject.com/Articles/32742/Implementing-MFC-Style-Serialization-in-NET-Part-2

Первая вещь в байте [] - это размер массива, и я могу получить его с помощью binaryReader.readInt32.().Тем не менее, я не могу вернуть значения с плавающей точкой.Если я пытаюсь выполнить binaryReader.readSingle () или

public void Read(out float d) {
    byte[] bytes = new byte[4];
    reader.Read(bytes, m_Index, 4);
    d = BitConverter.ToSingle(bytes, 0);
}

, я не верну правильные данные.Что мне не хватает?

РЕДАКТИРОВАТЬ Вот код C ++, который сериализует данные

typedef CArray<float, float> FloatArray;
FloatArray floatArray;
// fill floatArray
CSharedFile memoryFile(GMEM_MOVEABLE | GMEM_ZEROINIT);
CArchive ar(&memoryFile, CArchive::store); 
floatArray.Serialize(ar);
ar.Close();

РЕДАКТИРОВАНИЕ 2

Читая в обратном направлении, я смог получить все числа с плавающей точкой, а также определить, что размер CArray равен байту [2] или Int16.Кто-нибудь знает, так ли это всегда?

1 Ответ

1 голос
/ 21 февраля 2012

Используя статьи codeproject, приведенные выше, приведена реализация CArray на C #, которая позволит вам десериализовать сериализованный MFC CArray.

...