あなたはそれをすることができません。マネージ言語のポインターは何の意味もありません。参照されなくなると、しばしば再配置されて強制終了されます。おそらく、安全でないコードと固定されたポインターを使用して、このように (処理中に) 動作する何かを達成できるかもしれませんが、それはあなたの運命になるでしょう。
インプロセス通信のみが必要な場合は、クロススレッド通信の影響に注意してください。
クロス プロセス通信が必要な場合は、次のスレッドを参照してください:
C# の IPC メカニズム - 使用法とベスト プラクティス
編集:
SendMessage を介して uniqueID を送信し、シリアル化されたオブジェクトをフェッチします。ハッキングやバグが発生しやすいため、これはお勧めしませんが、次のように要求されました。
メッセージを送信するとき:
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");
}
コードのタイプミスで申し訳ありません。私はこのアドホックを書いており、テストできません...