在App A中,整数被写入ram。
var intBytes = BitConverter.GetBytes(123);
var allocatedMemory = Marshal.AllocHGlobal(intBytes.Length);
Marshal.Copy(intBytes, 0, allocatedMemory, intBytes.Length);
然后将指针发送到App B,再次读取整数。
byte[] buffer = new byte[Marshal.SizeOf<int>()];
Marshal.Copy(allocatedMemory, buffer, 0, buffer.Length);
var myRecievedInteger = BitConverter.ToInt32(buffer, 0);
问题是App B的随机值是错误的,有时App B中的Marshal.Copy
方法会抛出System.AccessViolationException
。
AllocCoTaskMem
方法不会改变任何内容。 4
这样的内存设置固定大小也无济于事。有人知道我做错了吗?
答案 0 :(得分:3)
正如评论中已经提到的那样,Marshaling不能以这种方式使用。
应用程序不能自由地写入和读取彼此的内存。这是O.S.的一大特色。这使得应用程序不会互相崩溃。
如果要在Windows中的应用程序之间共享数据,可以使用以下选项as explained here: