共享内存:
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*型的字符串都得不到。
我现在想结构里也共享字符串,正确的应该怎么定义呢?

解决方案 »

  1.   

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

  2.   

    要传字符串只能用字符数组吗?定义成char*有没有什么办法来共享?
      

  3.   

    如果定义成char *, 跨进程无法共享。
      

  4.   

    你可以把字符串就放在共享内存中,指针指向共享内存内部(用偏移量代替)。注意:char*这样的只是指针,指向进程内地址,不同进程之间含义不同。
      

  5.   

    chehw(chehw) 正解
    既然要共享数据,肯定要把数据复制到共享空间,别人才能访问。因为你是要在不同进程中共享数据。
      

  6.   

    chehw(chehw) +  Mackz(在相互)
    正解
      

  7.   

    "共享内存里面存全局内存句柄"?
    用static?
      

  8.   

    你的结构里面有指针,不能传送过去。
    你可以考虑这样定义结构: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);传输完成之后,需要释放空间,麻烦一点。总之呢,就是指针不能把指针给过去,要给数据。