我用mapviewoffile得到一个void 指针,然后用long型指针传递就出现错误,看代码:
类定义:
CMap::CMapInit(CString path)
{
hlas=CreateFile(path,GENERIC_WRITE|GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
hmapfile=CreateFileMapping( hlas,NULL,PAGE_READWRITE,0,0,0);
p=MapViewOfFile(hmapfile,FILE_MAP_WRITE,0,0,0);
}
实现:
         CString path=dlg.GetPathName();
long *pt;
         cmap.CMapInit(path);
pt=(long *)cmap.p;
CString m;
m.Format("%lf",pt[0]);
AfxMessageBox(m);
每次m都是0.00000
求教啊?

解决方案 »

  1.   

    首先要有错误判断,其次你先确定应该是什么值;另外你格式化用的是lf,这是用于格式化浮点数的,对于长整数应该用ld。
      

  2.   

    建议采用:MapViewOfFileEx,其中有起始地址数据成员,并且做条件判断,分析不同情况下的结果.
      

  3.   

    楼上说的判断没加,但是能保证打开读取无错误,我就想先从文件中读取一个long型的offset变量,再以offset为偏移量指向我需要的double型数据
    谁能给个代码啊?
      

  4.   

    pt=(long *)cmap.p;
    CString m;
    m.Format("%lf",pt[0]); //<- pt是long型指针。  修改-》m.Format("%l",pt[0]);offset如果不是以4个byte位单位,如果你接下来执行 Double * poffset = pt + *pt  肯定得不到你要的值。