c++共享内存(转载)
进程间通信 共享内存对于连个不同的进程之间的通信,共享内存是⼀种⽐较好的⽅式,⼀个进程把数据发送到共享内存中,另⼀个进程可以读取改数据,简单记录⼀下代码
1#define BUF_SIZE 256
2 TCHAR szName[]=TEXT("Global\\YourFileMappingObject"); //指向同⼀块共享内存的名字
3
4int SetFileName(LPCTSTR str)
5 {
6 HANDLE hMapFile;
7 LPCTSTR pBuf;
8
9 hMapFile = CreateFileMapping(
10 INVALID_HANDLE_VALUE, // use paging file
11 NULL, // default security
12 PAGE_READWRITE, // read/write access
130, // maximum object size (high-order DWORD)
14 BUF_SIZE, // maximum object size (low-order DWORD)
15 szName); // name of mapping object
16
17if (hMapFile == NULL)
18 {
19 _tprintf(TEXT("Could not create file mapping object (%d).\n"),
20 GetLastError());
21return0;
22 }
23 pBuf = (LPTSTR) MapViewOfFile(hMapFile, // handle to map object
24 FILE_MAP_ALL_ACCESS, // read/write permission
250,
260,
27 BUF_SIZE);
28
29if (pBuf == NULL)
30 {
31 _tprintf(TEXT("Could not map view of file (%d).\n"),
32 GetLastError());
33
34 CloseHandle(hMapFile);
35
36return0;
37 }
38
39 memcpy((PVOID)pBuf, str, BUF_SIZE);
40return1;
41 }
42
43 LPCTSTR GetBuffer()
44 {
45 HANDLE hMapFile;
46 LPCTSTR pBuf;
47
48 hMapFile = CreateFileMapping(
49 INVALID_HANDLE_VALUE, // use paging file
50 NULL, // default security
51 PAGE_READWRITE, // read/write access
520, // maximum object size (high-order DWORD)
53 BUF_SIZE, // maximum object size (low-order DWORD)
54 szName); // name of mapping object
55
56if (hMapFile == NULL)
57 {
58 _tprintf(TEXT("Could not create file mapping object (%d).\n"),
59 GetLastError());
60return NULL;
61 }
62 pBuf = (LPTSTR) MapViewOfFile(hMapFile, // handle to map object
63 FILE_MAP_ALL_ACCESS, // read/write permission
640,
650,
66 BUF_SIZE);
67
68if (pBuf == NULL)
69 {
70 _tprintf(TEXT("Could not map view of file (%d).\n"),
71 GetLastError());
72
73 CloseHandle(hMapFile);
74return NULL;
75 }
76return pBuf; 77 }
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论