Вы не сможете этого сделать.
Указатели на управляемом языке ничего не значат, их часто перемещают и убивают, когда на них больше нет ссылок.
Ну, может быть, вы сможете достичь чего-то, что вроде бы работает таким образом (в процессе), с небезопасным кодом и закрепленными указателями, но это будет вашей гибелью.
Если вы хотите только межпроцессное взаимодействие, то остерегайтесь последствий межпоточного взаимодействия.
Если вам нужно межпроцессное взаимодействие, посмотрите эту ветку:
Механизмы IPC в C # - Использование и лучшие практики
Edit:
Отправка uniqueID через SendMessage для получения сериализованного объекта.
Я не советую это делать, поскольку это может привести к взлому и ошибкам, но вы просили:
при отправке сообщения:
IFormatter formatter = new BinaryFormatter();
string filename = GetUniqueFilenameNumberInFolder(@"c:\storage"); // seek a freee filename number -> if 123.dump is free return 123 > delete those when not needed anymore
using (FileStream stream = new FileStream(@"c:\storage\" + filename + ".dump", FileMode.Create))
{
formatter.Serialize(stream, myClass);
}
PostMessage(_window, MSG_SENDING_OBJECT, IntPtr.Zero, new IntPtr(int.Parse(filename)));
при получении в WndProc:
if (msg == MSG_SENDING_OBJECT)
{
IFormatter formatter = new BinaryFormatter();
MyClass myClass;
using (FileStream stream = new FileStream(@"c:\storage\" + lParam.ToInt32().ToString() + ".dump", FileMode.Open))
{
myClass = (MyClass)formatter.Deserialize(stream);
}
File.Delete(@"c:\storage\" + lParam.ToInt32().ToString() + ".dump");
}
Извините за опечатки в коде, я пишу это ad hoc и не могу проверить ...