您需要第三个程序集充当两者之间的接口。该接口组件将导出所需的另外两个组件所需的所有对象和/或方法以相互通信。
下面这个例子当然是以.NET为平台,但在Win32/C++项目中可以使用相同的确切概念。
在建筑方面,这是一个棘手的问题。 .NET中的两个DLL不能直接沟通两个的方式没有一些开销,但是,你可以沟通一个的方式。原因是你只能引用另一个程序集,否则你将有一个循环引用。
虽然有一个简单的解决方案,但这需要三个部件。采取以下组件:
- Interface.dll
- Client.dll
- Server.dll
仅仅通过名字,你应该能够得到的,这是怎么回事个好主意工作。基本上,Interface.dll将包含Client.dll和Server.dll需要相互通信的公开对象。 Client.dll和Server.dll都会引用Interface.dll来访问这些对象。
使用该方法,这两个程序集都可以访问任何人需要通信的所有对象。 Interface.dll也将包含Client.dll和Server.dll需要通信的公开方法。因此它可能包含例如Client.dll或Server.dll可以使用的“发送”和“接收”方法。
你将不得不为此制定某种通信标准。
- 这些程序集将与另一个进行通信是什么?
- 这些组件将如何进行通信?
有了这两个虽这么说,无论你是实际的通信类和对象或只是信息,第三装配来处理这会工作得很好,只要你把在建筑和设计的工作。
不要把名字放在心上,Client.dll,Server.dll和Interface.dll都只是这样一个任务可以完成的常用方法的例子。使用这种方法,将不会有循环引用,因此您的程序集可以通过两种方式进行通信,而不是一种。
通过使用GetModuleHandle函数,您可以检查是否加载了DLL。再次加载DLL不是问题 - 它只是一个refcounter增量。也可以分享一种状态,而不是摧毁一个新的输出功能,我只是使用事件 - 这会容易得多。 – Andrey 2009-08-12 06:29:18