2009-11-24 39 views
2

我有一个C++类,我现在正在编写这个类将用于我正在处理的所有项目。我可以选择把它放在一个静态库中,或从一个DLL导出类。每种方法有哪些好处/处罚?我能想到的唯一一个编译代码大小,我并不关心它。谢谢!一个DLL的从dll与静态库导出类的好处

回答

9

优点:

  • 您可以访问这个功能的多个不同的exe文件的,所以你将有一个较小的项目规模的整体。
  • 您可以动态更新您的组件,而无需替换整个exe。如果你这样做,但要小心界面保持不变。
  • 有时候就像在LGPL的情况下,你被迫使用DLL。
  • 您可以将一些组件作为C#,Python或与您的DLL绑定的其他语言。
  • 您可以构建使用DLL的不同版本的DLL的程序。例如,您可以检查某个操作系统DLL中是否存在某个函数,并且只在该DLL存在时调用该函数,否则执行其他一些处理。

优势静态库:

  • 你不能有DLL verisoning这样
  • 少分配的问题,你是不是被迫进入一个完整的安装程序,如果你只有一个小的应用程序。
  • 您不必担心其他任何人绑定到您的代码中,如果它是DLL,则可以访问它。
  • 更容易开发一个静态库,因为您不需要担心出口和进口。
  • 内存管理更容易。
+0

很好的理由,我没有想到版本控制 – Steve 2009-11-24 20:07:26

+2

避免DLL版本问题的一种方法是将版本号添加到DLL文件的名称(例如作为后缀,如'mydll300.dll')。 – 2009-11-24 20:09:11

+0

顺便说一句,感谢您继续完善您的答案 – Steve 2009-11-24 20:13:17

0

在Windows上动态库的最重要和最常见的特征之一是DLL有自己的堆。根据您的观点,这可能是一种优势或劣势,但您需要了解它。例如,DLL中的全局变量将在连接到该库的所有进程之间共享,这可能是事实上的进程间通信的有用形式或不明确的运行时错误的来源。

+1

这不是100%正确的。 DLL中的全局变量是每个进程的实例。你可以通过编译/链接技巧创建系统全局变量,但这不是默认值。正如William在Win3.1中所说的那样,但在Win95/NT中发生了变化。 – jmucchiello 2009-11-24 20:37:37