是否有任何库,代码示例,开源项目等帮助我在两个或多个具有直接或间接内存访问权限的程序之间共享对象(数据集,集合......)。
如果没有办法做到这一点,请让我看看其他方式使我的应用程序工作。如何在两个或多个程序之间共享内存中的System.Object?
语言:C#.NET
平台:Vista x64的
是否有任何库,代码示例,开源项目等帮助我在两个或多个具有直接或间接内存访问权限的程序之间共享对象(数据集,集合......)。
如果没有办法做到这一点,请让我看看其他方式使我的应用程序工作。如何在两个或多个程序之间共享内存中的System.Object?
语言:C#.NET
平台:Vista x64的
我不是很确定如何这可以实现,但它可能是如果程序集都在同一个域中。如果其中一个程序集加载另一个程序集并给它一个指针/引用,第二个程序集可以通过该指针/引用调用第一个程序集,则可以使用参数调用第一个程序集内的方法。
在我的一个项目中,这是一个用C#编写的COM插件,一个COM dll实例化程序集中的两个不同类,它们可以共享静态数据。
你想看看WCF - 微软的统一Web服务和远程处理框架。它提供了许多用于进程间通信的选项,从基于http的XML到基于TCP/IP的二进制或命名管道。
一些进一步的文章:
我相信你最好的和最安全的选择将是通过WCF退房Named Pipes。直从MSDN:
命名管道是在 Windows操作系统的内核对象,例如 作为共享存储器 进程可以使用用于通信的一个部分。 A 命名管道有一个名称,并且可以使用 进行单个机器上的进程之间的单向或双工通信 。
我不知道任何,所以我会留下别人回答。如果这是不可能的,并且取决于两个应用程序是否需要实时了解变化,则可能会将您的类序列化为文件(例如XML)以共享当前状态信息。
这些应用程序旨在监视变化并对其进行响应。 – Behrooz 2009-12-14 13:55:14
你可以用某种方式文件或数据库或任何其他持久性技术,信息,WCF(或更低的进程间通信协议)
你一般不能从另一个,而访问一个程序存储器地址空间特殊的黑客,绝对不是在C#中。
是不是有什么办法可以做“特殊黑客”? – Behrooz 2009-12-14 13:58:07
他们在同一个域中。 你能解释一下吗? – Behrooz 2009-12-14 14:11:12
我想知道如果其中一个程序集是由COM可见的,另一个使用它作为COM组件,则程序集1中的一个方法可以由程序集2调用。您可以试试看它是否有效。 – A9S6 2009-12-14 14:58:37
我可以将代码指针复制到代理的_mehodptr。当DEP是desabled或我找到一个解决方案来摆脱DEP时,它真的有效。 – Behrooz 2009-12-14 16:25:53