Нельзя помещать объекты .NET в общую память.
Указатели действительны только в том процессе, в котором они созданы. Таким образом, данные могут совместно использоваться, только если они не имеют указателей (или используют адресацию на основе, концепция, которая в основном устарела в 32-разрядной модели плоской памяти).
Иногда вы можете обойтись без объектов C ++, которые имеют v-таблицу, если библиотека загружается по своему предпочтительному базовому адресу во всех процессах. Но функции .NET имеют динамические адреса, потому что они компилируются во время выполнения. Нет надежды, что указатели метаданных будут совпадать между различными процессами.
Кроме того, как будет работать сборка мусора? Сборщик мусора должен видеть все ссылки, чтобы знать, достижим ли объект, но вы не сможете увидеть неиспользуемую область других процессов. И в какую кучу будет возвращена память?
Заключение. Нельзя помещать объекты .NET в общие сегменты, отображаемые файлы общей памяти или использовать побитовую сериализацию. Вместо этого вам нужно поместить простые старые данные в общую область и использовать необработанные родные указатели (даже не умные указатели C ++, см. Выше комментарии об управлении памятью). Вы можете обернуть этот указатель в объект C ++ / CLI, чтобы сделать его дружественным, но вы не можете использовать сам объект .NET.