In meinem Projekt habe ich das CreateFileMapping
Konzept implementiert, um Speicher zwischen zwei Prozessen zu teilen. Ich habe einen Serverprozess, in dem ich die Speicheradresse meiner Sitzungsdaten speicher, die Details über ein bestimmtes Bild enthält. Und ich habe einen Client-Prozess, in dem ich diese Adresse aus dem Puffer gelesen habe. Jetzt ist das Problem, dass die Adresse im Clientprozess angezeigt wird, aber einige Details fehlen.Fehler beim Verwenden von Windows CreateFilemapping
Dies ist mein Server-Prozess Code:
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);
Das ist mein Client-Prozess Code:
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);
In Server-Prozess die Variable "test" enthält alle Details, aber im Client „test "Einige Daten fehlen.
Die folgende Server-Testvariable zeigt das angehängte Bild, das den Inhalt der Variablen anzeigt.
Die Client-Testvariable unten zeigt das angehängte Bild, das den Inhalt der Variablen zeigt.
Bitte den Unterschied prüfe ich die Positionsdaten auch sichtbar in meinem Client-Prozess benötigen ..
+1 für die Empfehlung Boost :: interprocess. Machen Sie sich nicht mit den fehleranfälligen Details der unteren Ebene herumärgern, wenn Sie eine nette (gut getestete) Abstraktion verwenden können. – lothar