我拿到一块板子,用vc写了程序,根据控制传输数据到板子上。问题是这样的:为了提高速度,要经过两个步骤:
1. LoadFileToBuffer(LPCSTR FileName,unsigned short *BufferPtr); //repeat 以传输多个文件到Buffer
2. MemToBoardBuffer (unsign short *Buffer)
我现在已知道很多的File,我的文件为bmp文件,可是怎样定义buffer呢?哪位给点提示,最好代码。

解决方案 »

  1.   

    CFile file;
    BITMAPINFOHEADER bmpinfo;
    try
    {
     file.Open("D:\\ToolBar.bmp",CFile::modeRead);
     file.Seek(sizeof(BITMAPFILEHEADER),CFile::begin);
     file.Read(&bmpinfo,sizeof(BITMAPINFOHEADER ));
     CString str;
     str.Format("位图文件的长是%d,高%d",bmpinfo.biWidth,bmpinfo.biHeight);
     MessageBox(str);
     file.Close();
    }
    catch(CFileException *e)
    {
     CString str;
     str.Format("读取数据失败的原因是:%d",e->m_cause);
     MessageBox("str");
     file.Abort();
     e->Delete();

    读取数据:
    BOOL ReadFile(
     HANDLE hFile, //文件的句柄
     LPVOID lpBuffer, //用于保存读入数据的一个缓冲区
     DWORD nNumberOfBytesToRead, //要读入的字符数
     LPDWORD lpNumberOfBytesRead, //从文件中实际读入的字符数
     LPOVERLAPPED lpOverlapped //如文件打开时指定了FILE_FLAG_OVERLAPPED,那么必须,用这个参数引用一个特殊的结构。该结构定义了一次异步读取操作。否则,应将这个参数设为NULL
    );写入数据:
    BOOL WriteFile(
     HANDLE hFile, //文件的句柄
     LPCVOID lpBuffer, //要写入的一个数据缓冲区
     DWORD nNumberOfBytesToWrite, //要写入数据的字节数量。如写入零字节,表示什么都不写入,但会更新文件的"上一次修改时间"。
     LPDWORD lpNumberOfBytesWritten, //实际写入文件的字节数量
     LPOVERLAPPED lpOverlapped // OVERLAPPED,倘若在指FILE_FLAG_OVERLAPPED的前提下打开文件,这个参数就必须引用一个特殊的结构。该结构定义了一次异步写操作。否则,该参数应置为NULL
    );
    void Write(const void* lpBuf,UINT nCount);
    throw (CFileException); lpBuf:指向用户提供的缓冲区,包含将写入文件中的数据nCount:从缓冲区内传输的字节数。对文本模式的文件,回车换行作为一个字符。
      

  2.   

    其实我对楼主的意思没看很懂,如果只是把位图变成字符串以上就够了,你的缓冲区的理解是?
    如果你对内存有一些想法,不如使用CMemFile,参考:http://baike.360.cn/wiki/item/CMemFile
      

  3.   

    是这样的,确切地说是这两个函数我不会用。
    1.Short LoadFileToBuffer(LPCTSTR FileName,unsigned short× FileBufferPtr)函数注释;LoadFileToBuffer is used to load memory buffer FileBuffer with the desired file.2.Short MenToBoardBuffer(unsigned short* BufferPtr)
    函数注释:is used to load the ACtivex control file buffer with a file .我知道大概的函数用途,但是不知道怎么用,主要是不知道第一个buffer是什么,怎么定义在哪里?就是不知道buffer参数的设置。哪位告知一下
      

  4.   

    unsigned short *BufferPtr;
    LoadImageFileToBuffer("mm.bmp", BufferPtr);  //"mm.bmp"我的数据文件对于第一个韩式,这样使用可以吗?但显示错误,不知道为什么
      

  5.   

    什么板子?
    最好先获得各个文件大小
    unsigned short *BufferPtr = new unsigned short[10*1024*1024];
    LoadFileToBuffer("1.bmp",BufferPtr);
    LoadFileToBuffer("2.bmp",BufferPtr);
    LoadFileToBuffer("3.bmp",BufferPtr);
    LoadFileToBuffer("4.bmp",BufferPtr);
    MemToBoardBuffer(BufferPtr); 
    delete[] BufferPtr;
      

  6.   

    谢谢楼上的,我的文件为一位的单色图像,大小1024×768;我应该怎么开辟内存缓冲呢?
    我这样写对吗?
    LONG bitmapsize=1024*768;//位图大小=位图宽X高  
    BYTE *buf=new BYTE[bitmapsize*10];//内存缓冲区,开辟了10副图像的内存缓冲这样写可否?