【问题标题】:Reading Serialized MFC CArray in C#在 C# 中读取序列化的 MFC CArray
【发布时间】:2012-03-10 04:37:58
【问题描述】:

MFC CArray 已序列化并保存到数据库。我需要将这些数据读入 C# 项目。我能够从数据库中以 byte[] 的形式检索数据。然后我将 byte[] 写入 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

byte[] 中的第一件事是数组的大小,我可以使用 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);
}

我没有取回正确的数据。我错过了什么?

EDIT这是序列化数据的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 的大小是 byte[2] 或 Int16。有谁知道是否总是这样?

【问题讨论】:

  • 例如,您确定数据保存为单而不是双吗?
  • 查看我的编辑,了解如何在 C++ 代码中序列化数据。谢谢!

标签: c# .net arrays serialization mfc


【解决方案1】:

使用上面的代码项目文章,这里是 CArray 的 C# 实现,它允许您反序列化序列化的 MFC CArray。

// Deriving from the IMfcArchiveSerialization interface is not mandatory
public class CArray : IMfcArchiveSerialization {
    public Int16 size;
    public List<float> floatValues;

    public CArray() {
        floatValues = new List<float>();
    }

    virtual public void Serialize(MfcArchive ar) {
        if(ar.IsStoring()) {
            throw new NotImplementedException("MfcArchive can't store");
        }
        else {
            // be sure to read in the order in which they were stored
            ar.Read(out size);

            for(int i = 0; i < size; i++) {
                float floatValue;
                ar.Read(out floatValue);
                floatValues.Add(floatValue);
            }
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-19
    • 1970-01-01
    • 2016-02-15
    • 1970-01-01
    • 2014-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多