即时通讯在MS Visual Studio 2010 Express中使用C++中的fstream库加载二进制数据文件(* .mgr扩展名 - >在我公司的应用程序中专门使用)中创建一个dll。该文件是由我公司的其他人使用Delphi开发的应用程序创建的。他说前15个字节应该是一些字符,表示文件的创建日期以及应用程序版本等其他内容:阅读使用Delphi二进制编写器编写的二进制文件的FStream
“XXXX 2012”。
与fstream的加载(在二进制模式)和写入用的fstream(串模式)另一个文件后的结果如下:
“[] XXXX 2 0 1 2”
的第一个字符是一个未知的字符(矩形),然后每个字符之间有空格。最后它是31个字节宽。 15用于实际字符+ 15用于空格+ 1用于矩形字符= 31.
其他信息: 我正在使用C++,应用程序开发人员正在使用Delphi。 我使用fstream。他正在使用BW.Write()函数。 (BW == Binary Writer?) 他使用Windows 7,而我使用Windows XP Professional。
您能否对问题做出诊断?
在此先感谢
首先编辑:我添加加载那些第一字节的C++代码。
首先,他使用embarcadero Rad Studio XE2的Delphi XE2。
从我所知道的PChar是一个空字符串组成的宽(由于德尔福2009年),它是2字节宽,而不是普通的字符(一个字节)。所以基本上他是保存单词而不是字节。
这里是代码加载经理:
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();
}
页眉包含15级wchar_t的的,所以我们得到30个字节。仍然在调查后,我不知道如何转换。
欢迎来到Stack Overflow。友好的建议。像这样的问题可以从包含代码中获益。读取文件并写入文本流的代码会有所帮助。更重要的是,Delphi版本非常重要。有两个Delphi分裂,pre-Unicode和post-Unicode。你的同事使用哪个版本? –