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

C# 在C中读取序列化的MFC CArray#,c#,.net,arrays,serialization,mfc,C#,.net,Arrays,Serialization,Mfc,MFC CArray已序列化并保存到数据库中。我需要把这些数据读入一个C#项目。我能够从数据库中以字节[]的形式检索数据。然后我将字节[]写入内存流。现在我需要从MemoryStream读取数据 显然有人以前解决过这个问题,但没有写出他们的解决方案 http://social.msdn.microsoft.com/Forums/eu/csharpgeneral/thread/17393adc-1f1e-4e12-8975-527f42e5393e 为了解决这个问题,我遵循了这些项目 字节[

MFC CArray已序列化并保存到数据库中。我需要把这些数据读入一个C#项目。我能够从数据库中以字节[]的形式检索数据。然后我将字节[]写入内存流。现在我需要从MemoryStream读取数据

显然有人以前解决过这个问题,但没有写出他们的解决方案

http://social.msdn.microsoft.com/Forums/eu/csharpgeneral/thread/17393adc-1f1e-4e12-8975-527f42e5393e
为了解决这个问题,我遵循了这些项目

字节[]中的第一件事是数组的大小,我可以使用binaryReader.readInt32()检索它。但是,我似乎无法恢复浮点值。如果我尝试binaryReader.readSingle()或

我没有得到正确的数据。我错过了什么

< > > >编辑< /St>这里是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();
typedef CArray浮动数组;
浮动数组浮动数组;
//填充浮点数组
CSharedFile memoryFile(GMEM_MOVEABLE | GMEM_zeronit);
CArchive ar(和memoryFile,CArchive::store);
floatArray.Serialize(ar);
ar.Close();
编辑2


通过向后读取,我能够得到所有的浮点值,也能够确定CArray的大小是字节[2],或Int16。有人知道情况是否总是这样吗?

使用上面的codeproject文章,这里是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);
            }
        }
    }
}
//从IMfcArchiveSerialization接口派生不是必需的
公共类CArray:IMfcArchiveSerialization{
公共Int16尺寸;
公共价值清单;
公共卡雷{
floatValues=新列表();
}
虚拟公共void序列化(MfcArchive ar){
if(ar.IsStoring()){
抛出新的NotImplementedException(“MfcArchive无法存储”);
}
否则{
//一定要按存储顺序阅读
应力读数(读出尺寸);
对于(int i=0;i
使用上面的codeproject文章,这里是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);
            }
        }
    }
}
//从IMfcArchiveSerialization接口派生不是必需的
公共类CArray:IMfcArchiveSerialization{
公共Int16尺寸;
公共价值清单;
公共卡雷{
floatValues=新列表();
}
虚拟公共void序列化(MfcArchive ar){
if(ar.IsStoring()){
抛出新的NotImplementedException(“MfcArchive无法存储”);
}
否则{
//一定要按存储顺序阅读
应力读数(读出尺寸);
对于(int i=0;i<代码>您是否确信数据保存为单个而不是双,例如,请参阅我的编辑,用于如何在C++代码中序列化数据。谢谢你确信数据保存为单一而不是双,例如,请参阅我的编辑,用于如何在C++代码中序列化数据。谢谢