请问进程间的通信是如何做到的?
请各位提供一下思路
请各位提供一下思路
解决方案 »
- 如何判断鼠标操作是真实操作引发的,还是模拟鼠标操作引发的?
- 【2分贴】CSDN的效率真慢,今天都5月4号了,排行榜还没出来
- 请高手帮我改段程序,看看有什么问题?
- 怎样获得当前dc?当前可能是打印机dc或是显示器dc
- 一个很菜的新手的问题...
- pc传送文件到单片机..
- 有什么Grid控件适合大量数据库记录的手工输入?
- 如何计算一段程序的运行时间
- ……%%%%%%%%%%%%……又到毕业找工作时,各位给点建议……%%%%%%%%%%%%……
- 请教关于UNICODE的问题
- 帮个忙吧高手,关于Activex的发布,
- CString类型的变量能支持多少个字符??????????????????????????????????
方法很多:共享内存、WM_COPYDATA、socket、管道等等一般的进程间通信都是以共享内存为基础实现的。
前提是二者都有窗口
FindWindow
SendMessage
用CreateFileMapping函数创建一个共享的内存块,在另一个程序中用MapViewOfFile函数可以得到这个内存块的地址,这样就可以访问这块内存了,达到进程之间通信的目的下面是个试例HANDLE hMapFile;hMapFile = CreateFileMapping(hFile, // Current file handle.
NULL, // Default security.
PAGE_READWRITE, // Read/write permission.
0, // Max. object size.
0, // Size of hFile.
"MyFileMappingObject"); // Name of mapping object.
if (hMapFile == NULL)
{
ErrorHandler("Could not create file-mapping object.");
}
LPVOID lpMapAddress;
lpMapAddress = MapViewOfFile(hMapFile, // Handle to mapping object.
FILE_MAP_ALL_ACCESS, // Read/write permission
0, // Max. object size.
0, // Size of hFile.
0); // Map entire file.
if (lpMapAddress == NULL)
{
ErrorHandler("Could not map view of file.");
}
The second process calls the OpenFileMapping function with the name MyFileMappingObject to use the same file-mapping object as the first process. Like the first process, the second process uses the MapViewOfFile function to obtain a pointer to the file view. HANDLE hMapFile;
LPVOID lpMapAddress;hMapFile = OpenFileMapping(FILE_MAP_ALL_ACCESS, // Read/write permission.
FALSE, // Do not inherit the name
"MyFileMappingObject"); // of the mapping object.
if (hMapFile == NULL)
{
ErrorHandler("Could not open file-mapping object.");
}
lpMapAddress = MapViewOfFile(hMapFile, // Handle to mapping object.
FILE_MAP_ALL_ACCESS, // Read/write permission.
0, // Max. object size.
0, // Size of hFile.
0); // Map entire file.
if (lpMapAddress == NULL)
{
ErrorHandler("Could not map view of file.");
}