2013-08-22 4 views
1
//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; 
} 

(내 메모리 블록에 "value1"정수 변수) 4 바이트 만 복사하려고합니다.메모리 블록 복사

내가이 오류를 얻을 컴파일하려고 :

Error 1 error C2036: 'PVOID' : unknown size

+0

당신은 유니 코드 지시어는 설정합니까? –

답변

0

포인터 사용 (PBYTE)를 3 바이트를 추가하려면를,하지 (PVOID)

+0

다른 말로하면'(PVOID) (pBuf + 3)' –

+0

은 고정되어 있지만 새로운 값은 그 메모리 블럭으로 대체되지 않습니다. 새로운 값은 988 –

+0

이어야합니다. 값은 988이 아닙니다. -858993460 –