有效使用DLL

时间:2011-06-02 09:21:25

标签: dll

到目前为止,我只在我的应用程序中使用DLL作为插件的来源。

但是我知道使用DLL将允许我更新我的程序“客户端”更容易重新下载主EXE。

问题是,我似乎找不到在我的应用程序中使用dll的有效方法,或以影响程序的方式使用它们,但不强迫我改变整个程序的工作方式。

此实例中的“应用程序”是XNA游戏。

例如,我有三个主要类(不包括主游戏类)

单位 玩家 联网。

我想在一个DLL中使用Units / Players,在另一个DLL中使用Networking,或者在至少中将网络移动到单独的DLL中,但是网络类的工作方式是编码将要求DLL具有对游戏的引用,并且游戏具有对DLL的引用,这在Visual Studio中被阻止以防止循环依赖。

我的问题是,如何有效地使用DLL存储我的网络类,我有几个想法,但我不确定它们中的任何一个是否可行。

如果可能的话,我想要的是让整个网络实例从dll运行,根据需要发送接收和更新游戏数据。

但到目前为止,我只能想出一种方法来接收和发送主游戏中的game.exe并将处理功能移动到dll中,即使这样,处理功能也无法(轻松)进行通信与游戏。

我还想过使用插件系统,但这需要我使用Delegates来处理我想在Networking DLL中使用的所有函数,从长远来看效率似乎非常低效。

如果这种事情不能用DLL完成(主机程序和dll之间的来回通信),那么它们还有什么用呢?

当然,我可以使用简单的函数,比如我的“Color”类来解析和返回颜色代码,但简单的事情不会改变,需要更新。

无论如何,我总是倾向于讨论那些无关紧要的事情(大多数情况下),所以感谢您看一看,以及任何回复:)

3 个答案:

答案 0 :(得分:0)

好的 - 所以你有3个相互依赖的类。

您是否可以更改关系,而不是引用另一个类,而是引用接口?

E.g。 ClassA有一个使用ClassB - MethodB1的方法 ClassB实现了接口IB,所以现在Class A有一个对IB的引用

将所有接口放在单独的程序集中。 现在A,B和C没有相互引用 - 只是对接口类。 在您的可执行文件中使用依赖注入来连接Concrete类实现。

答案 1 :(得分:0)

实际上,不使用DLL会大大简化事情。在这个快速下载的时代,我宁愿通过下载单个可执行文件来更新程序,而不是通常安装在明显不同位置的一堆DLL。

答案 2 :(得分:0)

通常,DLL只是在解决方案中包含更多项目的产物。

所以你问的问题是:

“为什么以及如何在我的解决方案中有更多项目?”

归结为源代码的组织。

在OOP中,通常可以将对象分组为较小的域,这些域可以自己描述并作为黑盒子使用。

这些黑盒子是DLL。

在游戏中我可以想到几个单独的项目:

  • 基类
  • 游戏逻辑
  • 渲染器
  • 序列化/反序列化(保存管理员)
  • 音频管理员
  • 代码实用程序......

因此,如果您可以按照这种方式组织代码,则可以使用DLL。

如果不重新组织你拥有的东西,你就无法拥有它们。

如果APP以非常单一的方式编码,那么在分离代码的逻辑域时可能会遇到麻烦。