无需查看源码,从原理上分析即可知晓如下内容:
1、EXE是独立的程序,有主动的目的,最常见的模式就是“输入+处理+输出”,运行它总会做点儿什么实际的事儿。事毕是否有能让人一眼看到的事件发生,则要看程序的输出设计了:显性的事件有在屏幕上输出计算结果,隐性的事件有在磁盘上创建一些文件,或者干预系统中的一些对象,例如关闭另外一个程序。追求用户界面(亦称人机交互方式)友好的话,最好不要一点儿显性事件都不发生,哪怕是干隐性的活儿,最后给个通知来报告干成没干成也是好的。特例:用于批处理执行往往有免打扰的需求,这时,可以通过命令选项、配置文件选项等来设置开关。总之,运行任何一个exe,用户有明确的动机。
2、DLL是个库,属于被动式地等待别的模块来调用,如何认识这些主调模块呢?从存储角度,它们可能是在.exe中,或者在另外的.dll中;从操作系统对象来看,则主调方是某个线程的一部分程序,有人说还有进程呀,可以这么理解,在windows中,进程必然包含线程,具体调度和执行是以线程为单位。DLL也有入口函数,但入了这个口要做什么,却不是像运行exe时的用户愿望,而仅仅是为了保障本DLL中其它库函数运行不出错,常见的动作是申请资源,如开辟缓冲区。再有,DLL的入口不是用户自主进入的,而是被进程或线程调用时才受邀进入的。
强行把一个DLL改写为exe,即将源代码中library改为program,而不添加实现用户愿望的程序代码,可以想见的运行效果就是“申请资源+退出”,当然是窗口一闪而过了。
你要把主程序的代码(*.dpr)贴出来,我们才能知道原因!
刚才看了你昨天给我的代码,怎么看怎么像是把dll直接当exe执行
dll不能独立运行,要依赖于exe运行,我不知道你是怎么运行dll的?
dll是动态链接库,不见得是可执行程序
控制台程序,应在启动控制台后,在命令窗口下运行,否则运行完后就自动退出了控制台,看不到运行结果,表现为一闪即过。