title: Access a boost::interprocess shared memory block from python with ctypes
body: <p>I have a structure in a C++ program, running on windows, that I want to access through shared memory in Python using ctypes. For instance:</p>
  
  <pre><code>#define MAX_ENTITIES 30
  
  struct State
  {
     double x;
     double y;
     double z;
  };
  
  struct Stat
  {
     unsigned int numAvailable;
     unsigned int numUsed;
  };
  
  struct TransferData
  {
     double exLg;
     float other;
     unsigned int more;
     int more2;
     unsigned char next;
     bool statusReady;
  
     Stat status;
     State entities[MAX_ENTITIES];
  };
  </code></pre>
  
  <p>As:</p>
  
  <pre><code>import ctypes
  
  MAX_ENTITIES = 30
  
  
  class State(ctypes.Structure):
      _fields_ = [
          ('x', ctypes.c_double),
          ('y', ctypes.c_double),
          ('z', ctypes.c_double)
      ]
  
  
  class Stat(ctypes.Structure):
      _fields_ = [
          ('numAvailable', ctypes.c_uint),
          ('numUsed', ctypes.c_uint)
      ]
  
  
  class TransferData(ctypes.Structure):
      _fields_ = [
          ('exLg', ctypes.c_double),
          ('other', ctypes.c_float),
          ('more', ctypes.c_uint),
          ('more2', ctypes.c_int),
          ('next', ctypes.c_ubyte),
          ('statusReady', ctypes.c_bool),
          ('status', Stat),
          ('entities', State * MAX_ENTITIES)
      ]
  </code></pre>
  
  <p>I was hoping that:</p>
  
  <pre><code>shmem = mmap.mmap(-1, ctypes.sizeof(TransferData.TransferData), 
            "TransferDataSHMEM")
  data = TransferData.from_buffer(shmem)
  </code></pre>
  
  <p>Would make data the shared memory mirror of what is represented in the C++ side, but it is all zero.</p>