高分求救:用CreateFileMapping共享内存中的一个数据结构有关问题

高分求救:用CreateFileMapping共享内存中的一个数据结构问题
共享内存:
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*型的字符串都得不到。
我现在想结构里也共享字符串,正确的应该怎么定义呢?



------解决方案--------------------
#define MAX_BUFFER_SIZE (100)
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 ");
------解决方案--------------------
如果定义成char *, 跨进程无法共享。
------解决方案--------------------
你可以把字符串就放在共享内存中,指针指向共享内存内部(用偏移量代替)。注意:char*这样的只是指针,指向进程内地址,不同进程之间含义不同。
------解决方案--------------------
chehw(chehw) 正解
既然要共享数据,肯定要把数据复制到共享空间,别人才能访问。

因为你是要在不同进程中共享数据。
------解决方案--------------------
chehw(chehw) + Mackz(在相互)
正解

------解决方案--------------------
呵呵,,,,
------解决方案--------------------
你也可以在共享内存里面存全局内存句柄,不过速度慢些
------解决方案--------------------
GlobalAlloc
------解决方案--------------------
你的结构里面有指针,不能传送过去。
你可以考虑这样定义结构:

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);

传输完成之后,需要释放空间,麻烦一点。

总之呢,就是指针不能把指针给过去,要给数据。