#include "SharedMemory.hpp" void* pData = NULL; HANDLE hMapFile = NULL; std::string SharedMemoryName = "Local\\GLHookMap"; GL_EXTERN bool __stdcall CreateSharedMemory() { if ((hMapFile = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, MapSize, SharedMemoryName.c_str())) == NULL) { return false; } if ((pData = MapViewOfFile(hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, MapSize)) == NULL) { CloseHandle(hMapFile); return false; } return true; } GL_EXTERN bool __stdcall OpenSharedMemory() { if ((hMapFile = OpenFileMappingA(FILE_MAP_ALL_ACCESS, false, SharedMemoryName.c_str())) == NULL) { std::cout<<"\nCould Not Open Shared Memory Map.\n"; return false; } if ((pData = MapViewOfFile(hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, MapSize)) == NULL) { CloseHandle(hMapFile); std::cout<<"\nCould Not Map View Of File.\n"; return false; } std::cout<<"\nInter-Process Communication Successful.\n"; return true; } GL_EXTERN bool __stdcall UnMapSharedMemory() { if (hMapFile != NULL) { UnmapViewOfFile(pData); CloseHandle(hMapFile); return true; } return false; } GL_EXTERN bool __stdcall SharedMemoryBusy() { int* Data = static_cast(pData); return Data[1] > 0 ? true : false; } GL_EXTERN void* __stdcall RequestSharedMemory() { for (int Success = 0; Success < 50; ++Success) { if (SharedMemoryBusy()) Sleep(10); else break; } return pData; } GL_EXTERN bool __stdcall SharedMemoryReturned() { int* Data = static_cast(pData); return Data[1] == 2 ? true : false; } GL_EXTERN bool __stdcall SharedDataFetched() { for (int Success = 0; Success < 50; ++Success) { if (SharedMemoryReturned()) return true; if (!SharedMemoryBusy()) return false; Sleep(10); } return false; }