Dans mon projet, j'ai implémenté le concept CreateFileMapping
pour partager de la mémoire entre deux processus. J'ai un processus de serveur dans lequel je stocke l'adresse de mémoire de mes données de session, qui contient des détails au sujet d'une image particulière. Et j'ai un processus de client dans lequel j'ai lu cette adresse du tampon. Maintenant le problème est l'adresse est montrée dans le processus de client mais quelques détails manquent.Erreur lors de l'utilisation de Windows CreateFilemapping
Ceci est mon code de processus serveur:
HANDLE hMem;
LPCSTR pBuf;
#define BUF_SIZE 1024
static const char MemoryName[]="Share Memory Name";
hMem=CreateFileMapping(INVALID_HANDLE_VALUE,NULL, PAGE_READWRITE,0, BUF_SIZE, MemoryName);
pBuf = (LPCSTR) MapViewOfFile(hMem, FILE_MAP_ALL_ACCESS, 0, 0, BUF_SIZE);
CopyMemory((PVOID)pBuf, session, BUF_SIZE);
LtEntity test = LtEntity(pBuf);
Ceci est mon code de processus client:
HANDLE hMem;
LPCSTR pBuf;
#define BUF_SIZE 1024
static const char MemoryName[]="Share Memory Name";
hMem = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, MemoryName);
pBuf = (LPCSTR) MapViewOfFile(hMem, FILE_MAP_ALL_ACCESS, 0, 0, BUF_SIZE);
LtEntity test = LtEntity(pBuf);
Dans le processus de serveur la variable "test" contient tous les détails, mais dans le client « test "a des données manquantes.
La variable de test du serveur ci-dessous montre l'image ci-jointe qui montre le contenu de la variable.
La variable de test client ci-dessous montre l'image ci-jointe qui montre le contenu de la variable.
S'il vous plaît faire vérifier la différence i besoin des données de l'élément aussi visible dans mon processus client ..
+1 pour recommander Boost :: interprocess. Ne jouez pas avec les détails à faible niveau d'erreur si vous pouvez utiliser une belle abstraction (bien testée). – lothar