我有一个像这样运行的系统:
main.exe运行sub.exe运行sub2.exe
等等......
那么,将sub和sub2更改为dll会更快更高效吗?
如果可以的话,有人可以指出我在不改变大量代码的情况下制作dll的正确方向吗?
答案 0 :(得分:3)
DLL也是可执行文件。它们符合PE标准,该标准涵盖了Windows的多个常见文件扩展名,如.exe,.dll,.ocx ......
当你启动2个可执行文件时,它们每个都有自己的地址空间,自己的内存等等。但是,当您加载可执行文件和dll时,dll会加载到可执行文件的进程空间中,因此它们共享很多内容。
现在取决于您的3个可执行文件如何一起通信(如果它们甚至可以一起通信),您可能需要重写一些代码。基本上,拥有dll的一般方法是简单地从程序内部调用dll函数。这通常比进程间通信简单得多
答案 1 :(得分:2)
如果你的程序(main.exe)只是启动与它无关的程序,那就继续做你正在做的事情。如果sub.exe和sub2.exe包含main.exe将受益的功能,请将它们转换为dll,以便main.exe可以调用其中的函数。
在效率方面,它取决于sub.exe和sub2.exe的大小。请记住,加载dll也意味着开销。
答案 2 :(得分:2)
DLL 肯定比单独的可执行文件更快。但是将它们分开可以提供更多的灵活性和重用(想想Unix shell脚本)。
This似乎是Win32的一个很好的DLL教程。
至于不多改变代码,我假设你只是用命令行参数将信息传递给这些代码。在这种情况下,只需重命名main
函数,从DLL中导出它们,然后从主程序中调用这些重命名的“main
”函数。
答案 3 :(得分:1)
有几个因素需要考虑。对于初学者,您多久运行一次该序列,以及其他可执行文件执行的作业有多长?如果你不经常打电话给他们,并且他们执行的工作不是很短,那么加载时间本身就变得微不足道了。在那种情况下,我会说任何适合其他需要的东西。如果,OTOH,你确实打电话给他们很多,我会说让他们成为DLL。加载一次,从那时起,每次调用都与调用本地函数一样快。
至于将exe转换为dll - 它应该不是很复杂,但是在使用需要特别小心的dll时有一些要点:使用dllmain进行初始化有一些常规main没有的限制(同步问题) );你必须记住一个DLL与exe共享地址空间; CRT版本的差异可能会让您感到悲伤and so on。
答案 4 :(得分:0)
这取决于它们运行的频率。如果,过程的撕裂/拆除是一个重大的成本。
答案 5 :(得分:0)
将它们转换为dll以防止用户在没有主要启动的情况下意外运行sub1或sub2会不会更安全?