CreateFileMapping在N个进程间共享一个HWND类型内存
来源:互联网 发布:python批量替换字符串 编辑:程序博客网 时间:2024/06/05 08:22
Windows高深啊,做点东西要查来查去,把人脑创造性转成机器服务
class
CIPC
{
public
:
CIPC();
virtual
~CIPC();
bool
CreateIPCMMF(
void
);
bool
OpenIPCMMF(
void
);
void
CloseIPCMMF(
void
);
bool
IsOpen(
void
)
const
{
return
(m_hFileMap != NULL);}
bool
ReadIPCMMF(
LPBYTE
pBuf,
DWORD
&dwBufSize);
bool
WriteIPCMMF(
const
LPBYTE
pBuf,
const
DWORD
dwBufSize);
bool
Lock(
void
);
void
Unlock(
void
);
protected
:
HANDLE
m_hFileMap;
HANDLE
m_hMutex;
};
#include <windows.h>
#include <tchar.h>
#include <crtdbg.h>
#include "IPC.h"
const
static
LPCTSTR
g_szIPCSharedMMF = _T(
"{34F673E0-878F-11D5-B98A-00B0D07B8C7C}"
);
const
static
LPCTSTR
g_szIPCMutex = _T(
"{34F673E1-878F-11D5-B98A-00B0D07B8C7C}"
);
//***********************************************
CIPC::CIPC() : m_hFileMap(NULL), m_hMutex(NULL)
{
}
//***********************************************
CIPC::~CIPC()
{
CloseIPCMMF();
Unlock();
}
//***********************************************
bool
CIPC::CreateIPCMMF(
void
)
{
bool
bCreated =
false
;
try
{
if
(m_hFileMap != NULL)
return
false
;
// Already created
// Create an in-memory 4KB memory mapped file to share data
m_hFileMap = CreateFileMapping((
HANDLE
)0xFFFFFFFF,
NULL,
PAGE_READWRITE,
0,
4096,
g_szIPCSharedMMF);
if
(m_hFileMap != NULL)
bCreated =
true
;
}
catch
(...) {}
return
bCreated;
}
//***********************************************
bool
CIPC::OpenIPCMMF(
void
)
{
bool
bOpened =
false
;
try
{
if
(m_hFileMap != NULL)
return
true
;
// Already opened
m_hFileMap = OpenFileMapping(FILE_MAP_READ | FILE_MAP_WRITE,
FALSE,
g_szIPCSharedMMF);
if
(m_hFileMap != NULL)
bOpened =
true
;
}
catch
(...) {}
return
bOpened;
}
//***********************************************
void
CIPC::CloseIPCMMF(
void
)
{
try
{
if
(m_hFileMap != NULL)
CloseHandle(m_hFileMap), m_hFileMap = NULL;
}
catch
(...) {}
}
//***********************************************
bool
CIPC::ReadIPCMMF(
LPBYTE
pBuf,
DWORD
&dwBufSize)
{
_ASSERTE(pBuf);
bool
bSuccess =
true
;
try
{
if
(m_hFileMap == NULL)
return
false
;
DWORD
dwBaseMMF = (
DWORD
)MapViewOfFile(m_hFileMap,
FILE_MAP_READ | FILE_MAP_WRITE,
0, 0, 0);
_ASSERTE(dwBaseMMF);
// The first DWORD in the MMF contains the size of the data
DWORD
dwSizeofInBuf = dwBufSize;
CopyMemory(&dwBufSize, (
LPVOID
)dwBaseMMF,
sizeof
(
DWORD
));
if
(dwSizeofInBuf != 0)
{
if
(dwBufSize > dwSizeofInBuf)
bSuccess =
false
;
else
CopyMemory(pBuf, (
LPVOID
)(dwBaseMMF +
sizeof
(
DWORD
)), dwBufSize);
}
UnmapViewOfFile((
LPVOID
)dwBaseMMF);
}
catch
(...) {}
return
bSuccess;
}
//***********************************************
bool
CIPC::WriteIPCMMF(
const
LPBYTE
pBuf,
const
DWORD
dwBufSize)
{
_ASSERTE(pBuf);
bool
bSuccess =
true
;
try
{
if
(m_hFileMap == NULL)
return
false
;
DWORD
dwBaseMMF = (
DWORD
)MapViewOfFile(m_hFileMap,
FILE_MAP_READ | FILE_MAP_WRITE,
0, 0, 0);
_ASSERTE(dwBaseMMF);
// The first DWORD in the MMF contains the size of the data
CopyMemory((
LPVOID
)dwBaseMMF, &dwBufSize,
sizeof
(
DWORD
));
CopyMemory((
LPVOID
)(dwBaseMMF +
sizeof
(
DWORD
)), pBuf, dwBufSize);
UnmapViewOfFile((
LPVOID
)dwBaseMMF);
}
catch
(...) {}
return
bSuccess;
}
//***********************************************
bool
CIPC::Lock(
void
)
{
bool
bLocked =
false
;
try
{
// First get the handle to the mutex
m_hMutex = CreateMutex(NULL, FALSE, g_szIPCMutex);
if
(m_hMutex != NULL)
{
// Wait to get the lock on the mutex
if
(WaitForSingleObject(m_hMutex, INFINITE) == WAIT_OBJECT_0)
bLocked =
true
;
}
}
catch
(...) {}
return
bLocked;
}
//***********************************************
void
CIPC::Unlock(
void
)
{
try
{
if
(m_hMutex != NULL)
{
ReleaseMutex(m_hMutex);
CloseHandle(m_hMutex);
m_hMutex = NULL;
}
}
catch
(...) {}
}
建立
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
HANDLE hShare = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, sizeof(HWND), TEXT("SHARE"));
if(hShare)
{
LPVOID lp = MapViewOfFile(hShare, FILE_MAP_ALL_ACCESS, 0, 0, 0);
if(lp)
{
lp = (HWND) hWnd;
FlushViewOfFile(lp, sizeof(hWnd));
}
else
{
MessageBox(hWnd, TEXT("lp!"), TEXT("lp"), MB_OK);
}
}
else
{
MessageBox(hWnd, TEXT("Error!"), TEXT("Error"), MB_OK);
}
读取
HANDLE hShare = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, TEXT("SHARE"));
if(hShare)
{
HWND lp = (HWND)MapViewOfFile(hShare, FILE_MAP_ALL_ACCESS, 0, 0, 0);
ShowWindow((HWND)lp, SW_HIDE);
}
else
{
MessageBox(hWnd, TEXT("Error!"), TEXT("Error"), MB_OK);
}
- CreateFileMapping在N个进程间共享一个HWND类型内存
- CreateFileMapping映射共享内存
- 内存共享CreateFileMapping用法
- 共享内存mmap()和CreateFileMapping()
- <Win32 API> CreateFileMapping 共享内存
- Windows环境下利用“共享内存”实现进程间通信的C/C++代码---利用CreateFileMapping和MapViewOfFile
- Windows环境下利用“共享内存”实现进程间通信的C/C++代码---利用CreateFileMapping和MapViewOfFile
- Windows环境下利用“共享内存”实现进程间通信的C/C++代码---利用CreateFileMapping和MapViewOfFile
- CreateFileMapping实现的共享内存及用法
- CreateFileMapping实现的共享内存及用法
- CreateFileMapping实现的共享内存及用法
- CreateFileMapping实现的共享内存及用法
- CreateFileMapping实现的共享内存及用法
- 多个Apk共享在一个进程中
- 进程间共享内存
- 进程间共享内存
- Windows API介绍及用法:CreateFileMapping和MapViewOfFile函数(进程间数据共享)
- 使用DLL在进程间共享内存_如何在多进程中用共享DLL
- day02-XML约束
- Bitbucket使用
- Kafka安装过程
- Pre-built.2网络库在cocos2dx中的使用
- 雅克比矩阵、海森矩阵与非线性最小二乘间的关系与在SFM和Pose Estimation中的应用
- CreateFileMapping在N个进程间共享一个HWND类型内存
- 让程序员少走弯路的14个忠告
- Oracle WebLogic Server: How to clear pending XA transactions(Oracle Thin/XA Driver)?
- Xcode6为什么干掉Prefix.pch文件&如何添加pch文件
- codeforces 508 D. Tanya and Password (fleury算法)
- sublime text创建属于自己的插入时间的小插件
- Java_集合操作_使遍历Map时取出的元素顺序与放入时一致
- 领导的境界
- (14) Java 动态代理(JDK)