私のプロジェクトでは、CreateFileMapping
のコンセプトを実装して、2つのプロセス間でメモリを共有しました。私はセッションデータのメモリアドレスを格納するサーバープロセスを持っています。これには特定のイメージに関する詳細が含まれています。そして私はバッファからそのアドレスを読み取るクライアントプロセスを持っています。今問題は、クライアントプロセスにアドレスが表示されていますが、詳細は表示されません。Windows CreateFilemappingを使用したエラー
これが私のサーバー・プロセスのコードです:
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);
これは私のクライアントプロセスコードです:サーバプロセスで
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);
変数「テスト」は、すべての詳細が含まれていますが、クライアント「テスト中"データが欠落しています。
以下のサーバーテスト変数は、変数の内容を示す添付イメージを示しています。
以下のクライアントテスト変数は、変数の内容を示す添付イメージを示しています。
あなたはおそらくあまりにも、シリアライズされていないLtEntity
内のポインタ/参照を持っている..私は私のクライアントプロセスに見えるも、アイテムデータを必要とするの違いを確認し
+1はBoost :: interprocessを推奨しています。素晴らしい(よくテストされた)抽象化を使用できる場合は、低レベルのエラーが発生する可能性のある細部に挑戦しないでください。 – lothar