小编use*_*573的帖子

FStream读取用Delphi的二进制写入器编写的二进制文件

我在MS Visual Studio 2010 Express中创建一个dll,它使用C++中的fstream库加载二进制数据文件(*.mgr扩展名 - >专门用于我公司的应用程序).该文件是使用我公司中正在使用Delphi的其他人开发的应用程序创建的.他说,前15个字节应该是一些字符,表示文件的创建日期和其他一些东西,如应用程序的版本:

"XXXX 2012".

加载fstream(二进制模式)并使用fstream(字符串模式)写入另一个文件后的结果如下:

"[] XXXX 2 0 1 2"

第一个char是一个未知的char(矩形),然后每个char之间有空格.最后是31字节宽.15为实际字符+ 15为空格+ 1为rect char = 31.

其他一些信息:我正在使用C++,app开发人员正在使用Delphi.我正在使用fstream.他正在使用BW.Write()函数.(BW == Binary Writer?)他在使用Windows XP Professional时使用Windows 7.

你能诊断出这个问题吗?

提前致谢

First Edit:我正在添加加载那些第一个字节的c ++代码.

首先他使用embarcadero Rad Studio XE2的Delphi XE2.

据我所知,PChar是一个以null结尾的字符串,由宽字符组成(自delphi 2009以来),宽度为2字节,而不是普通的字符(一个字节).所以基本上他是保存单词而不是字节.

这是加载mgr的代码:

wchar_t header[15];
DXFLIBRARY_API void loadMGR(const char* szFileName, const char* szOutput)
{
fstream file;
file.open( szFileName, ios::binary | ios::in );
if(file.is_open()) 
{
    file.read(reinterpret_cast<char*>(header),sizeof(header));
}
file.close();

//zapis

fstream saveFile;
saveFile.open( szOutput, ios::out );
if(saveFile.is_open())
{
    saveFile.write(reinterpret_cast<const char*>(header),sizeof(header));
}
saveFile.close(); …
Run Code Online (Sandbox Code Playgroud)

c++ delphi delphi-xe2

4
推荐指数
1
解决办法
878
查看次数

标签 统计

c++ ×1

delphi ×1

delphi-xe2 ×1