共享内存:
m_hMapObject=CreateFileMapping((HANDLE)0xFFFFFFFF,NULL,
PAGE_READWRITE, 0, 0x1000, _TEXT("shared_memory"));
m_pSMapView=(m_MapView_Struct *)MapViewOfFile
(m_hMapObject,FILE_MAP_WRITE, 0, 0,0);共享的数据结构如下:
struct m_MapView_Struct{
char m_c;
int m_iMapView;
char* m_pszMapView;
char* m_pszMapView2;
}* m_pSMapView;发送进程里如下分配:
m_pSMapView->m_iMapView = 13628;
m_pSMapView->m_c = '*';
char *stmp1 = "m_pszMapView1";
m_pSMapView->m_pszMapView = stmp1;
(char *)(m_pSMapView->m_pszMapView2) = "m_pszMapView2";结果
接收进程能读取到int型和char型,但是两个char*型的字符串都得不到。
我现在想结构里也共享字符串,正确的应该怎么定义呢?
m_hMapObject=CreateFileMapping((HANDLE)0xFFFFFFFF,NULL,
PAGE_READWRITE, 0, 0x1000, _TEXT("shared_memory"));
m_pSMapView=(m_MapView_Struct *)MapViewOfFile
(m_hMapObject,FILE_MAP_WRITE, 0, 0,0);共享的数据结构如下:
struct m_MapView_Struct{
char m_c;
int m_iMapView;
char* m_pszMapView;
char* m_pszMapView2;
}* m_pSMapView;发送进程里如下分配:
m_pSMapView->m_iMapView = 13628;
m_pSMapView->m_c = '*';
char *stmp1 = "m_pszMapView1";
m_pSMapView->m_pszMapView = stmp1;
(char *)(m_pSMapView->m_pszMapView2) = "m_pszMapView2";结果
接收进程能读取到int型和char型,但是两个char*型的字符串都得不到。
我现在想结构里也共享字符串,正确的应该怎么定义呢?
解决方案 »
- SDK下的按钮
- VS2008 重新安装时出错
- 怎样保存VC6.0窗体控件中内容到文件中(不用数据库)
- 我调试程序时,QQ的QQHook.dll出现在我加载的dll列表里,为什么?
- CHtmlView的一个问题
- [求助]有没有好方法把ULONG转换成IP格式
- SOCKET互联,CONNECT方物理连接中断后,一段时间内无法响应用户消息?
- 经过程序加密后新生成一个文件,有什么办法可以更改它的图标吗?
- 如果从串口取数据放到数据库中(实时),用三个线程好不好?
- 这两天看看了doc/view结构的程序觉得太枯燥了,请问用mfc做什么有意思阿!
- 求飞鸽传书中获得在线用户列表的原理
- 使用MSCHART,在未安装VC的机子上不能运行
struct m_MapView_Struct{
char m_c;
int m_iMapView;
char m_pszMapView[MAX_BUFFER_SIZE];
char m_pszMapView2[MAX_BUFFER_SIZE];
}* m_pSMapView;lstrcpy(m_pSMapView->m_pszMapView, "m_pszMapView1");
lstrcpy(m_pSMapView->m_pszMapView2, "m_pszMapView2");
既然要共享数据,肯定要把数据复制到共享空间,别人才能访问。因为你是要在不同进程中共享数据。
正解
用static?
你可以考虑这样定义结构:struct{
...
int nDataLen;
char *pData;
...
}到时候
char *pStr = _T("test string ");
a.nDataLen = strlen(pStr);
a.pData = new char[a.nDataLen];
memset(a.pData, 0, sizeof(char) * a.nDataLen);
strcpy(a.pData, pStr);传输完成之后,需要释放空间,麻烦一点。总之呢,就是指针不能把指针给过去,要给数据。