即時通訊在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。你的同事使用哪個版本? –