如何在共享内存C-Windows中保存结构

如何在共享内存C-Windows中保存结构,c,windows,winapi,shared-memory,C,Windows,Winapi,Shared Memory,我有一个结构: typedef struct configuration { char *server_type; char *server_ip; unsigned int server_port; } configuration; 现在,由于我有更多的进程,我需要在所有进程之间共享这个结构(在主进程初始化之后)。 所以我有一个名为共享内存: TCHAR szMsg[]=TEXT("JUST A TEST"); LPCTSTR pBuf; HANDLE hMapFil

我有一个结构:

typedef struct configuration {
    char *server_type;
    char *server_ip;
    unsigned int server_port;
} configuration;
现在,由于我有更多的进程,我需要在所有进程之间共享这个结构(在主进程初始化之后)。 所以我有一个名为共享内存:

TCHAR szMsg[]=TEXT("JUST A TEST");
LPCTSTR pBuf;
HANDLE hMapFile;
hMapFile = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, BUF_SIZE, "Global\\Config");

if (hMapFile == NULL){
    perror("Errore nel creare memory object");
    exit(1);
}

pBuf = (LPTSTR) MapViewOfFile(hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, BUF_SIZE);
if (pBuf == NULL){
    perror("Errore nel mappare la view del file");
    CloseHandle(hMapFile);
    exit(1);
}

CopyMemory((PVOID)pBuf, szMsg, (_tcslen(szMsg) * sizeof(TCHAR)));
UnmapViewOfFile(pBuf);
现在,我如何传递代替szMsg的结构指针,并从另一个进程从共享内存读取它


谢谢

创建一个数据类型为“configuration*structPoint”的变量,然后代替“TCHAR szMsg”传递structPoint。

您只需在另一个可执行文件中打开映射即可。MS的这个示例给出了一个使用DLL实现内存共享的示例。除非指针指向共享内存,否则它们在目标进程中毫无意义。即使这样,只以适当的格式存储值(如大小重新固定的字符串)也更容易。是的,它可以用于固定大小的字符数组,如字符字符串[xx],但为什么它不能用于结构中的指针,然后是malloc呢?不应该是同一件事吗?我是C语言的新手,不要绞死我。为什么不在struct中使用固定大小的字符数组??@use:What size?如果你对此没有答案,你就会明白为什么不使用固定大小的数组。这解决不了任何问题。指针仅在创建它们的过程中才有意义。将该指针传递到另一个进程不会有任何效果。