C# 在C中读取序列化的MFC CArray#
MFC CArray已序列化并保存到数据库中。我需要把这些数据读入一个C#项目。我能够从数据库中以字节[]的形式检索数据。然后我将字节[]写入内存流。现在我需要从MemoryStream读取数据 显然有人以前解决过这个问题,但没有写出他们的解决方案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 为了解决这个问题,我遵循了这些项目 字节[
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++代码中序列化数据。谢谢