[英]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.