2011-05-09 125 views
0

我阅读有关共享内存和操作系统的书我读提供了以下生产者/消费者计划:内存映射,文件在Windows

监制:

#include <windows.h> 
#include <stdio.h> 

int main(int argc, char *argv[]) 
{ 
    HANDLE hFile, hMapFile; 
    LPVOID lpMapAddress; 

    hFile = CreateFile("temp.txt", 
     GENERIC_READ | GENERIC_WRITE, 
     0, 
     NULL, 
     OPEN_ALWAYS, 
     FILE_ATTRIBUTE_NORMAL, 
     NULL); 

    hMapFile = CreateFileMapping(hFile, 
     NULL, 
     PAGE_READWRITE, 
     0, 
     0, 
     TEXT("SharedObject")); 

    lpMapAddress = MapViewOfFile(hMapFile, 
     FILE_MAP_ALL_ACCESS, 
     0, 
     0, 
     0); 

    sprintf(lpMapAddress, "Shared memory message"); 

    UnmapViewOfFile(lpMapAddress); 
    CloseHandle(hFile); 
    CloseHandle(hMapFile); 
} 

消费者:

#include <windows.h> 
#include <stdio.h> 

int main(int argc, char *argv[]) 
{ 
    HANDLE hMapFile; 
    LPVOID lpMapAddress; 

    hMapFile = OpenFileMapping(FILE_MAP_ALL_ACCESS, 
     FALSE, 
     TEXT("SharedObject")); 

    lpMapAddress = MapViewOfFile(hMapFile, 
     FILE_MAP_ALL_ACCESS, 
     0, 
     0, 
     0); 

    printf("Read message %s", lpMapAddress); 

    UnmapViewOfFile(lpMapAddress); 
    CloseHandle(hMapFile); 
} 

问题是它不编译。 VISUAL C++ 2008 Express使这个错误在生产部分:

错误C2664: 'sprintf的':无法从 'LPVOID' 到 '字符*'

什么问题转换参数1?

+0

可能的重复[如何写入共享内存在C++?](http://stackoverflow.com/questions/1423031/how-do-i-write-to-shared-memory-in-c) – Joe 2011-05-10 00:11:28

回答

0

在C++中,从'void *'到指向非void的指针的转换需要显式强制转换。

sprintf需要char *,所以必须施放void指针。