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;这样写有什么问题吗.读取出来的.我测试过,应该是正常.但是函数返回之后.就变乱码了

解决方案 »

  1.   

    struct JysInfo
    {
    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);
    }
      

  2.   

    JI是局部变量,readinfo返回后就被释放了,内容会被新的东西覆盖
      

  3.   

    如果return 的是 
    DWORD ImageLenth;
    WORD Blood;  
    WORD InternalForces; 三个成员之一的话,应该可以得到预料中的值。但TCHAR *的话,就不可行了
      

  4.   

    常用的:
    1 , 你可以在函数内new一个堆,这样源代码就可以得到正确的sz了,注意要delete2,,你可以在给这个函数添加一个out pass参数JysInfo *
      

  5.   

    这些都不可行.其实.我是写成dll.让delphi调用的,如果是普通的文本,同样返回这值不会出问题.但是写成结构体就出错了
      

  6.   

    是要让delphi调用.没办法那样传递啊,本人菜鸟,如果说得不对,请见谅
      

  7.   

    ReadFile(FileHandle,&JI,20,&num,NULL);//sizeof(JI)
    结构对齐?