IPC entre Python y Win32 en el sistema operativo Windows

Tengo dos aplicaciones C que pueden comunicarse a través de las API IPC de win32 (CreateFileMapping () etc.)

Tengo que reemplazar la aplicación cliente con una aplicación Python.

He intentado las siguientes bibliotecas en el lado de Python.

importar archivo win32, win32api

Pero estas bibliotecas no tienen funciones CreateFileMapping ().

También probé la función mmap.mmap () pero no pude observar ninguna comunicación.

import mmap sharedMemory = mmap.mmap(0, 512, "Local\\SharedBuffer") sharedMemory.write("AB") 

También he intentado “Global \ SharedBuffer” y “SharedBuffer”, ya que los dos nombres de memoria compartida.

 #define SHARED_BUFFER_NAME ((LPCSTR)L"Local\\SharedBuffer") HANDLE bufferHandle = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, 512, SHARED_BUFFER_NAME); // Create a map for accessing Shared Buffer sharedBuffer = (char*)MapViewOfFile(bufferHandle, FILE_MAP_ALL_ACCESS, 0, 0, SHARED_BUFFER_SIZE); memset(sharedBuffer, 0, SHARED_BUFFER_SIZE); while (sharedBuffer[0] == 0); while (1); 

Las API de win32 no son obligatorias para mí. Solo necesito un búfer compartido simple entre C y la aplicación python en Windows Machine.

Gracias

Probé esto … funciona … Ejecutar el código C ++ primero. Se creará un mapa de memoria. A continuación, ejecute el código python. Se escribirá en el mapa. El código C ++ leerá el mapa e imprimirá lo que se escribió en él.

Sé que este código es MALO porque no serializo los datos correctamente (es decir, si escribo el tamaño en el archivo primero, luego los datos, etc.) pero meh … Es solo un ejemplo de trabajo BÁSICO … Nada más.

Pitón:

 import mmap shm = mmap.mmap(0, 512, "Local\\Test") #You should "open" the memory map file instead of attempting to create it.. if shm: shm.write(bytes("5", 'UTF-8')); shm.write(bytes("Hello", 'UTF-8')) print("GOOD") 

C ++:

 #include  #include  #include  #include  typedef struct { void* hFileMap; void* pData; char MapName[256]; size_t Size; } SharedMemory; bool CreateMemoryMap(SharedMemory* shm) { if ((shm->hFileMap = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, shm->Size, shm->MapName)) == NULL) { return false; } if ((shm->pData = MapViewOfFile(shm->hFileMap, FILE_MAP_ALL_ACCESS, 0, 0, shm->Size)) == NULL) { CloseHandle(shm->hFileMap); return false; } return true; } bool FreeMemoryMap(SharedMemory* shm) { if (shm && shm->hFileMap) { if (shm->pData) { UnmapViewOfFile(shm->pData); } if (shm->hFileMap) { CloseHandle(shm->hFileMap); } return true; } return false; } int main() { SharedMemory shm = {0}; shm.Size = 512; sprintf(shm.MapName, "Local\\Test"); if (CreateMemoryMap(&shm)) { char* ptr = (char*)shm.pData; memset(ptr, 0, shm.Size); while (ptr && (*ptr == 0)) { Sleep(100); } int size = (int)*ptr; ptr += sizeof(char); int i = 0; for (; i < size; ++i) { std::cout<