【问题标题】:Copy Memory Block复制内存块
【发布时间】:2013-08-25 07:12:55
【问题描述】:
//include headers.
#include <windows.h>
#include <iostream>
#define BUF_SIZE 256
TCHAR szName[]=TEXT("MyFileMappingObject");
LPCTSTR pBuf;

//my data stracture.
struct NetworkVariabel
{
    int ServerTime;
    int Value1;
    int Value2;
};

//main program.
int  main()
{
    //map file handel.
    HANDLE hMapFile;
    hMapFile = CreateFileMapping(
        INVALID_HANDLE_VALUE,    // use paging file
        NULL,                    // default security
        PAGE_READWRITE,          // read/write access
        0,                       // maximum object size (high-order DWORD)
        BUF_SIZE,                // maximum object size (low-order DWORD)
        szName);                 // name of mapping object

    //if null.
    if (hMapFile == NULL){
        return 0;
    }

    pBuf = (LPTSTR) MapViewOfFile(hMapFile,   // handle to map object
        FILE_MAP_ALL_ACCESS, // read/write permission
        0,
        0,
        BUF_SIZE);

    //if null.
    if (pBuf == NULL){ 
        CloseHandle(hMapFile); 
        return 0;
    }

    //my memory block data
    NetworkVariabel BaseGlobalNetData;
    BaseGlobalNetData.ServerTime=100;
    BaseGlobalNetData.Value1=50;
    BaseGlobalNetData.Value2=80;

    CopyMemory((PVOID)pBuf, &BaseGlobalNetData,sizeof(BaseGlobalNetData)   );//fill memory block this line work fine.

    //my new memory block data
    NetworkVariabel ReplaceNewGlobalNetData;
    ReplaceNewGlobalNetData.Value1=988;

    //now just want to replace 4byte(the Value1 variable data) into memory block so add to next 3 byte offset and 4byte Len because its integer ;
    CopyMemory((PVOID)pBuf+3, &ReplaceNewGlobalNetData,    sizeof(int)   );

    //get a key.
    getchar();

    //unmap.
    UnmapViewOfFile(pBuf);

    //close map.
    CloseHandle(hMapFile);

    return 0;
}

我只想复制 4 个字节:(“value1”整数变量到我的内存块中)。

当我尝试编译时出现此错误:

错误 1 ​​错误 C2036:“PVOID”:未知大小

【问题讨论】:

  • 你设置了 UNICODE 指令吗?

标签: c++ memory serialization memory-management file-mapping


【解决方案1】:

要向指针添加 3 个字节,请使用 (PBYTE),而不是 (PVOID)

【讨论】:

  • 换句话说(PVOID)(pBuf+3)
  • 错误已修复,但新值未替换为该内存块。新值必须为 988
  • 值不是 988 而是 -858993460
  • ReplaceNewGlobalNetData的布局是什么?
  • 我刚刚将 (PVOID)pBuf+3 替换为---> (PBYTE)pBuf+4
猜你喜欢
  • 2021-01-25
  • 2012-12-30
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多