///////////////////////////////////////////////////////////////////////////// // Rev 16/12/2003 // // // SHAREMEMORY.C // ------------- // // // Sylvain MARECHAL - sylvain.marechal1@libertysurf.fr ///////////////////////////////////////////////////////////////////////////// // // La lecture et l'ecriture de donnees en memoire partagee // La memoire partagee est identifiee par une chaine de caractere // // ///////////////////////////////////////////////////////////////////////////// #ifdef _WIN32 #include #include "sharememory.h" #ifdef _WIN32_WCE #include "wince.h" #endif static BOOL s_fWrite = TRUE; ///////////////////////////////////////////////////////////////////////////// // // SETWRITESHAREMEM ///////////////////////////////////////////////////////////////////////////// // // DESCRIPTION // --SetWriteShareMem-- // Positionne une variable static pour savoir s'il faut ecrire // ou pas en memoire partagee // ARGUMENTS // Argument1: BOOL fWrite // RETOUR/RESULTAT // void // REMARQUE // Rev 5/5/99 ////////////////////////////////////////////////////////////////////////////// void SetWriteShareMem( BOOL fWrite ) { s_fWrite = fWrite; } ///////////////////////////////////////////////////////////////////////////// // // SETSHAREMEMORYINFO ///////////////////////////////////////////////////////////////////////////// // // DESCRIPTION // --SetShareMemoryInfo-- // Argument1: char * pszShareMem : IN -> Le nom du seg de memoire // Argument2: void * pInfo : IN -> Copie de ce qui est en memoire // Argument3: int nSizeInfo IN -> Taille (Faut pas faire n'importe quoi ) // RETOUR/RESULTAT // HANDLE // REMARQUE // Rev 21/4/99 ////////////////////////////////////////////////////////////////////////////// HANDLE SetShareMemoryInfo( LPCTSTR pszShareMem, void * pInfo, int nSizeInfo ) { HANDLE hmap; LPVOID lpvmem; /* On ecrase pas la memoire partagee */ if( ! s_fWrite ) return (HANDLE)NULL; hmap = CreateFileMapping((HANDLE)0xFFFFFFFF, NULL, PAGE_READWRITE, 0, nSizeInfo, pszShareMem ); if( hmap == NULL ) { return NULL; } if( GetLastError() == ERROR_ALREADY_EXISTS ) { /* Ben tant mieux ... */ } lpvmem = MapViewOfFile( hmap, FILE_MAP_WRITE, 0, 0, 0 ); if( lpvmem == NULL ) { CloseHandle(hmap); return NULL; } memcpy( (char*)lpvmem, (char*)pInfo, nSizeInfo ); // La faut pas tout fermer ... UnmapViewOfFile( lpvmem ); /* Test 31-05-1999 */ // CloseHandle(hmap); return hmap; } ///////////////////////////////////////////////////////////////////////////// // // GETSHAREMEMORYINFO ///////////////////////////////////////////////////////////////////////////// // // DESCRIPTION // --GetShareMemoryInfo-- // Argument1: char * pszShareMem : IN -> Le nom du seg de memoire // Argument2: void * pInfo : OUT -> Copie de ce qui est en memoire // Argument3: int nSizeInfo IN -> Taille (Faut pas faire n'importe quoi ) // RETOUR/RESULTAT // BOOL -> Si FALSE, PAS DE MEMOIRE PARTAGEE // REMARQUE // Rev 21/4/99 ////////////////////////////////////////////////////////////////////////////// BOOL GetShareMemoryInfo( LPCTSTR pszShareMem, void * pInfo, int nSizeInfo ) { HANDLE hmap; LPVOID lpvmem; // On recupere le hWnd de fenetre hmap = OpenFileMapping( PAGE_READWRITE, 0, pszShareMem ); if( hmap == NULL ) { return FALSE; } lpvmem = MapViewOfFile( hmap, FILE_MAP_READ, 0, 0, 0 ); if( lpvmem == NULL ) { CloseHandle(hmap); return FALSE; } memcpy( pInfo, (char*)lpvmem, nSizeInfo ); UnmapViewOfFile( lpvmem ); CloseHandle(hmap); return TRUE; } ///////////////////////////////////////////////////////////////////////////// // // CLOSESHAREMEMORY ///////////////////////////////////////////////////////////////////////////// // // DESCRIPTION // --CloseShareMemory-- // Fermer la memoire partagee (Nettoyage) // ARGUMENTS // Argument1: HANDLE hmap // RETOUR/RESULTAT // BOOL // REMARQUE // Rev 4/6/99 ////////////////////////////////////////////////////////////////////////////// BOOL CloseShareMemory( HANDLE hmap ) { CloseHandle(hmap); return TRUE; } #endif /*_WIN32*/