こんにちは、Microsoft のファイル マッピングを使用して、クラスから P1 プロセスのオブジェクトを P2.exe プロセスに共有したいと考えています。 vs.85).aspx .
P1 がデータを書き込み、P2 がデータを読み取ります。すべてのデータを共有したいのですが、うまくいきません。
P1:
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <tchar.h>
#include <iostream>
#include <string>
using namespace std;
TCHAR szName[] = TEXT("Global\\MyFileMappingObject");
class Object
{
public:
string nameWindow;
string nameLogFile;
HWND hwndWindow;
HANDLE histFile;
WIN32_FIND_DATA dataFile;
};// members to read
int _tmain()
{
Object add;
HANDLE hMapFile;
add.nameLogFile= "Logfil";
add.nameWindow = "Windowstest";
Table *bufData;
hMapFile = CreateFileMapping(
INVALID_HANDLE_VALUE, // use paging file
NULL, // default security
PAGE_READWRITE, // read/write access
0, // maximum object size (high-order DWORD)
sizeof(Table), // maximum object size (low-order DWORD)
szName); // name of mapping object
if (hMapFile == NULL)
{
_tprintf(TEXT("Could not create file mapping object (%d).\n"),
GetLastError());
return false;
}
bufData = (Object*)MapViewOfFile(hMapFile, // handle to map object
FILE_MAP_ALL_ACCESS, // read/write permission
0,
0,
sizeof(Table));
if (bufData == NULL)
{
_tprintf(TEXT("Could not map view of file (%d).\n"),
GetLastError());
CloseHandle(hMapFile);
return false;
}
CopyMemory((PVOID)bufData, &add, sizeof(Table));
cout << "Mise en memoire " << endl;
_getch();
UnmapViewOfFile(bufData);
CloseHandle(hMapFile);
}
P2:
#include <windows.h>
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <tchar.h>
#include <string>
using namespace std;
#pragma comment(lib, "user32.lib")
class Object
{
public:
string nameWindow;
string nameLogFile;
HWND hwndWindow;
HANDLE histFile;
WIN32_FIND_DATA dataFile;
};// members to write
TCHAR szName[] = TEXT("Global\\MyFileMappingObject");
int _tmain()
{
HANDLE hMapFile;
LPCTSTR pBuf;
Table *bufData=new Table;
hMapFile = OpenFileMapping(
FILE_MAP_ALL_ACCESS, // read/write access
FALSE, // do not inherit the name
szName); // name of mapping object
if (hMapFile == NULL)
{
_tprintf(TEXT("Could not open file mapping object (%d).\n"),
GetLastError());
return 1;
}
bufData = (Object*)MapViewOfFile(hMapFile, // handle to map object
FILE_MAP_ALL_ACCESS, // read/write permission
0,
0,
sizeof(Object));
if (bufData == NULL)
{
_tprintf(TEXT("Could not map view of file (%d).\n"),
GetLastError());
CloseHandle(hMapFile);
return 1;
}
cout << "DATA" << endl;
cout << "Log:" << bufData->nameLogFile<<endl;
cout << "Window:" << bufData->nameWindow << endl;
UnmapViewOfFile(bufData);
CloseHandle(hMapFile);
system("pause");
return 0;
}
したがって、テストには 2 つの文字列のみを使用してみます: add.nameLogFile= "Logfil" および add.nameWindow = "Windowstest"; 両方の大きさ。P2 は 2 つの文字列をうまく読み取ります。
しかし、1 つの文字 (add.nameWindow = "Windowstest+" サイズが両方とも 28) の場合、それはもう機能しません。これは、サイズまたはメモリ エラーである可能性があります。
TCHAR szName[] = TEXT("Global\MyFileMappingObject");
だから私の質問は:
ファイルまたはバッファのデータ サイズを増やすにはどうすればよいですか? ファイルマッピングでオブジェクトクラスのすべてのメンバーを渡すにはどうすればよいですか (2 つの文字列と HWND hwndWindow; HANDLE histFile; WIN32_FIND_DATA dataFile) 2 つのプロセス間でオブジェクトからのデータを共有する他の方法はありますか。
PS: 多くのフォーラムを読みましたが、答えが見つからないか、理解できません。
全てに感謝。