#5 gna
teď nad tím sedím, ta fce je funkční, ale na druhé straně je pamě´t prázdná. udělal jsem si dva procesy kde vytavřím pamět a ve druhem ji ctu a to funguje.
OpenFileMapping nelze použít WinCE ji nezná,a le funguje to přes
CreateFileMapping.
Důležité je nezavřít handle v prvním procesu jinak se paměť ztratí.
Proces1
#define BUF_SIZE 256
TCHAR szName[]=TEXT("SharedMemory");
TCHAR szMsg[]=TEXT("Ahoj svete!");
int setmem()
{
HANDLE hMapFile;
LPCTSTR pBuf;
hMapFile = CreateFileMapping(
INVALID_HANDLE_VALUE, // use paging file
NULL, // default security
PAGE_READWRITE, // read/write access
0, // maximum object size (high-order DWORD)
BUF_SIZE, // 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 1;
}
pBuf = (LPTSTR) MapViewOfFile(hMapFile, // handle to map object
FILE_MAP_ALL_ACCESS, // read/write permission
0,
0,
BUF_SIZE);
if (pBuf == NULL)
{
_tprintf(TEXT("Could not map view of file (%d).\n"),
GetLastError());
CloseHandle(hMapFile);
return 1;
}
CopyMemory((PVOID)pBuf, szMsg, (_tcslen(szMsg) * sizeof(TCHAR)));
UnmapViewOfFile(pBuf);
//CloseHandle(hMapFile);
return 0;
}
setmem();
Proces 2
Pokud nevim velikost, lze definovat 0, taky to funguje, nesmi byt ovšem větší nez původně definovaná, jinak to skonci chybou.
#define BUF_SIZE 0x0
TCHAR szName[]=TEXT("SharedMemory");
int getmem()
{
HANDLE hMapFile;
LPCTSTR pBuf;
/*hMapFile = OpenFileMapping(
FILE_MAP_ALL_ACCESS, // read/write access
FALSE, // do not inherit the name
szName); // name of mapping object*/
hMapFile = CreateFileMapping(
INVALID_HANDLE_VALUE, // use paging file
NULL, // default security
PAGE_READWRITE, // read/write access
0, // maximum object size (high-order DWORD)
BUF_SIZE, // maximum object size (low-order DWORD)
szName); // name of mapping object
if (hMapFile == NULL)
{
_tprintf(TEXT("Could not open file mapping object (%d).\n"),
GetLastError());
return 1;
}
pBuf = (LPTSTR) MapViewOfFile(hMapFile, // handle to map object
FILE_MAP_ALL_ACCESS, // read/write permission
0,
0,
BUF_SIZE);
if (pBuf == NULL)
{
_tprintf(TEXT("Could not map view of file (%d).\n"),
GetLastError());
CloseHandle(hMapFile);
return 1;
}
MessageBox(NULL, pBuf, TEXT("Process2"), MB_OK);
UnmapViewOfFile(pBuf);
CloseHandle(hMapFile);
return 0;
}
getmem();