struct JysInfo
{
TCHAR name[6];
DWORD ImageLenth;
WORD Blood;
WORD InternalForces;
}; wchar_t * readInfo(wchar_t* FilePath)
{
JysInfo JI;
FileHandle=CreateFile(FilePath,GENERIC_READ |GENERIC_WRITE|FILE_SHARE_DELETE ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_FLAG_WRITE_THROUGH,0);
DWORD num;
ReadFile(FileHandle,&JI,20,&num,NULL);
return JI.name;
}return JI.name;这样写有什么问题吗.读取出来的.我测试过,应该是正常.但是函数返回之后.就变乱码了
{
TCHAR name[6];
DWORD ImageLength;
WORD Blood;
WORD InternalForces;
};BOOL WriteInfo(LPCTSTR pszFile, JysInfo& info)
{
HANDLE hFile = CreateFile(pszFile, GENERIC_READ | GENERIC_WRITE,
0, NULL, CREATE_ALWAYS, 0, NULL);
if(INVALID_HANDLE_VALUE == hFile)
{
return FALSE;
}
DWORD dwWrite = 0;
if(!WriteFile(hFile, &info, sizeof(info), &dwWrite, NULL))
{
return FALSE;
}
return CloseHandle(hFile);
}BOOL ReadInfo(LPCTSTR pszFile, JysInfo& info)
{
HANDLE hFile = CreateFile(pszFile, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ,
NULL, OPEN_EXISTING, 0, NULL);
if(INVALID_HANDLE_VALUE == hFile)
{
return FALSE;
}
DWORD dwRead = 0;
if(!ReadFile(hFile, &info, sizeof(info), &dwRead, NULL))
{
return FALSE;
}
return CloseHandle(hFile);
}void CXXDlg::OnOK()
{
// TODO: Add extra validation here
JysInfo InInfo = {0};
JysInfo OutInfo = {0};
_tcscpy(InInfo.name, _T("ABC"));
InInfo.ImageLength = 11;
InInfo.Blood = 22;
InInfo.InternalForces = 33;
LPCTSTR pszFile = _T("F:\\11.txt");
WriteInfo(pszFile, InInfo);
ReadInfo(pszFile, OutInfo);
CString str;
str.Format(_T("name: %s, ImageLength = %d, Blood = %d, InternalForces = %d"),
OutInfo.name, OutInfo.ImageLength, OutInfo.Blood, OutInfo.InternalForces);
AfxMessageBox(str);
}
DWORD ImageLenth;
WORD Blood;
WORD InternalForces; 三个成员之一的话,应该可以得到预料中的值。但TCHAR *的话,就不可行了
1 , 你可以在函数内new一个堆,这样源代码就可以得到正确的sz了,注意要delete2,,你可以在给这个函数添加一个out pass参数JysInfo *
结构对齐?