+ -
当前位置:首页 → 问答吧 → MFC下CFile的调用可以修改pBuf的定义吗?

MFC下CFile的调用可以修改pBuf的定义吗?

时间:2011-12-13

来源:互联网

根据孙鑫的vc++写的程序:
C/C++ code

char *pBuf;
DWORD dwFileLen;
CFileDialog fileDlg(TRUE);
    fileDlg.m_ofn.lpstrFilter="Text Files(*.doc)\0*.doc\0*.jpg\0All File(*.*)\0*.*\0\0";
    //fileDlg.m_ofn.lpstrDefExt="doc";

    if (IDOK==fileDlg.DoModal())
    {
        CFile file(fileDlg.GetFileName(),CFile::modeRead|CFile::typeBinary);
        //char *pBuf;
        //DWORD dwFileLen;
        dwFileLen=file.GetLength();
        pBuf=new char[dwFileLen+1];
        pBuf[dwFileLen]=0;
        file.Read(pBuf,dwFileLen);
        file.Close();        
    }


然后在调用另存为函数实现文件的保存
C/C++ code

CFileDialog fileDlg(FALSE);
    fileDlg.m_ofn.lpstrFilter="Text Files(*.doc)\0*.doc\0All File(*.*)\0*.*\0\0";
    
    if (IDOK==fileDlg.DoModal())
    {
        CFile file(fileDlg.GetFileName(),CFile::modeCreate|CFile::modeWrite);
        file.Write(pBuf,dwFileLen);
        file.Close();
        //MessageBox(pBuf);
    }


这部分功能已经实现
我现在要在此基础上扩展到我自己的应用程序,调用自己的API程序,遇到问题了。
之前我的API程序,都是定义定长的buffer然后调用API函数:xChannelIOWrite(hChannel,uint32_t ulAreaNumber,uint32_t ulOffset,uint32_t ulDataLen,void* pvData, uint32_t ulTimeout);其中 ulDataLen是我定义的buffer的长度void* pvData这个参数就是我定义的数据名,
比如:buffer定义为:unsigned char abWriteIOBuffer[100] = {0};
相应的API函数就是xChannelIOWrite( hChannel,0, 0,100 , abWriteIOBuffer,10)
我现在把两者结合起来时就有问题了,CFile里面buffer是定义的指针形式,我的应用程序是数组的,我把应用程序改了,API调用就返回错误,本人新手指针和数组这块不是很清楚求指教!!


作者: shixi2012   发布时间: 2011-12-13

当然可以用数组,直接传数组的名字

作者: ouyh12345   发布时间: 2011-12-13

引用 1 楼 ouyh12345 的回复:

当然可以用数组,直接传数组的名字

我把CFile里面改成统一的
unsigned char abWriteIOBuffer[100] = {0};时,数组大小不确定所以100改为dwFileLen,但这样定义不对,而且改成数组的话原来程序 pBuf=new char[dwFileLen+1];这个新建一个内存空间这里我也不会处理了,直接修改名字是不对的,您详细说一下吗?谢谢了

作者: shixi2012   发布时间: 2011-12-13

char str_buff[100];
memset(str_buff, 0, sizeof(str_buff));
file.Read(str_buff, 100);

作者: ouyh12345   发布时间: 2011-12-13

谁要你修改名字了,什么都不用改,在参数中直接用abWriteIOBuffer啊,建议你重新学习C语言或C++语言

作者: yayafu   发布时间: 2011-12-13