簡體   English   中英

在C#中讀取序列化的MFC CArray

[英]Reading Serialized MFC CArray in C#

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()進行檢索。 但是,我似乎無法找回float值。 如果我嘗試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的大小為byte [2]或Int16。 有誰知道是否總是這樣?

使用上面的代碼項目文章,這里是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);
            }
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM