开发平台(Platform): (Ex: Win10, Linux, ...)
Win10
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
Visual Studio2015
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
MFC
问题(Question):
小弟我目前要在64位元程式接收32位元程式产出的档案
64及32程式都使用同一个dll(不过一个是32位元 一个是64位元)
https://imgur.com/a/bzvtkOb (sgFloat看做double)
在32位元程式写入档案
CFile fp;
fp.Open(sPath,CFile::modeCreate|CFile::modeWrite|CFile::typeBinary);
CArchive ar(&fp, CArchive::store);
CRule* pData = new CRule();
sgCMatrix* psgTemp;
psgTemp = new sgCMatrix();
psgTemp->SetMatrix(&g_tMatrix); //sgCMatrix g_tMatrix 宣告在其他cpp上、运算
pData->m_tMatrix = (void*) psgTemp; //void* m_tMatrix 宣告在CRule
ar.Write(pData->m_tMatrix, sizeof(sgCMatrix)); //sizeof(sgMatrix) 为132byte
在64位元程式读档
CFile fp;
fp.Open(sPath,CFile::modeRead|CFile::typeBinary);
CArchive ar(&fp, CArchive::load);
CRule* pData = new CRule();
sgCMatrix* psgTemp;
psgTemp = new sgCMatrix();
ar.Read((void*) psgTemp, sizeof(sgCMatrix)); //sizeof(sgMatrix) 为136byte
pData->m_tMatrix = (void*) psgTemp;
因为指标的差异所以内存上大小有差所以资料会错误
目前有两个做法
1.把读档的sizeof(sgMatrix )直接改成132
读资料时不会错误,但psgTemp里该写入136只写132 后续是否产生错误
2.把32位元的程式升级到64位元
需将之前建好的档案重建,但32位元建档步骤很多,全部重建需花很多时间
3.在32位元程式写档时写入136byte
不过sgMatrix 不是自己写, 所以结构无法改
请各位前辈赐教
喂入的资料(Input):
预期的正确结果(Expected Output):
错误结果(Wrong Output):
程式码(Code):(请善用置底文网页, 记得排版,禁止使用图档)
补充说明(Supplement):