遇到这样一个问题:client进程需要调用一个DLL与server进程进行数据通信(需要发/收大的数组),我对windows系统编程所知不多,请教大家这种情况下应该怎么操作?使用内存共享的话,DLL如何通知server数据已经写到共享内存中了?同样对server,它又如何通知DLL数据已经写到共享内存中了呢?
解决方案 »
- Activex 容器拖动的问题
- 如何用ado向sqlserver数据库中插入一条记录
- 确定按钮删除出错??
- 为什么为什么为什么?怪异的问题
- 用了XTREME后,它自己生成的SDI框架中,菜单.状态栏的字体太小,我想改成9号宋体,怎么办?
- 请教各位,我用wise installation system(9.01)打包程序生成程序管理组后,为什么反安装不能删除创建的程序组?
- 请问关于CScrollView中SetScrollSize()如何突破32K?
- 这个字符串如何生成?
- VC如何在DAO数据库接口下打开有密码的MDB数据库(已知道密码)
- 如何高效统计一个区间内离散数据的个数
- 带有上下增/减箭头按钮的编辑框如何实现?
- VC++2005编程环境,两台电脑通过串口相连接,怎样进行接发数据通信?
其他 IP,端口,等 当参数传进去
DLL中#define WM_GETMESSAGE WM_USER+112 //自定义消息
HANDLE hMapping;
LPWSTR lpData;
hMapping=CreateFileMapping((HANDLE)0xFFFFFFFF,NULL,PAGE_READWRITE,0,0x1000,"MYSHARE");
if(hMapping!=NULL)
{
lpData=(LPWSTR)MapViewOfFile(hMapping,FILE_MAP_ALL_ACCESS,0,0,0);
if(lpData!=NULL)
{
swprintf(lpData,L"%s","你要写的数据");
//给主线程发送消息 g_hMain是目标进程的窗口句柄
PostMessage(g_hMain,WM_GETMESSAGE,NULL,NULL);
}
UnmapViewOfFile(lpData);
}
接收的进程
LRESULT CMainDlg::OnReceiveMessage(WPARAM wParam, LPARAM lParam)
{
HANDLE hMapping;
LPWSTR lpData;
hMapping=CreateFileMapping((HANDLE)0xFFFFFFFF,NULL,PAGE_READWRITE,0,0x1000,"MYSHARE");
if(hMapping!=NULL)
{
lpData=(LPWSTR)MapViewOfFile(hMapping,FILE_MAP_ALL_ACCESS,0,0,0);
if(lpData!=NULL)
{
CString strText(lpData);
//处理接收到的数据
.......
}
UnmapViewOfFile(lpData);
}
return true;
}