DLL与EXE程序问题,DELPHI高手进
首先声明我一个菜鸟,学习DELPHI才1个月,请高手能认真详细解答。我在网上找了一个程序源代码,主要实现代码全部在DLL中,EXE只是加载运行。现在我用DELPHI7修改...
首先声明我一个菜鸟,学习DELPHI才1个月,请高手能认真详细解答。
我在网上找了一个程序源代码,主要实现代码全部在DLL中,EXE只是加载运行。
现在我用DELPHI7修改了DLL为EXE,编写格式都没有问题,但运行的时候却一闪而过,却不像原来的程序一直运行。
请问为什么DLL变为EXE后,不能正常运行呢?
我当然知道DLL不能直接运行,问题是我已经在DELPHI中重新整合代码了!这次是按控制台程序模板编辑的!编辑格式也没有问题!希望请懂编程的高手回答。
ZXD4G 回答的非常仔细认真,这几天认真看了很多DLL的代码,也算是了解了一些。但问题还是没解决,我还是不太明白,我已经将源EXE、DLL代码全都添加到后来编辑控制台程序的中(也就是控制台程序中,有调用运行DLL函数的语句),我知道应用程序需要需要使用事件去激活它(如窗口、按钮),但作为控制台程序,却为什么没有执行呢?难道控制台程序,也需要使用事件?
//这个程序是个监视键盘的程序,未开杀软防火墙、系统环境正常。 展开
我在网上找了一个程序源代码,主要实现代码全部在DLL中,EXE只是加载运行。
现在我用DELPHI7修改了DLL为EXE,编写格式都没有问题,但运行的时候却一闪而过,却不像原来的程序一直运行。
请问为什么DLL变为EXE后,不能正常运行呢?
我当然知道DLL不能直接运行,问题是我已经在DELPHI中重新整合代码了!这次是按控制台程序模板编辑的!编辑格式也没有问题!希望请懂编程的高手回答。
ZXD4G 回答的非常仔细认真,这几天认真看了很多DLL的代码,也算是了解了一些。但问题还是没解决,我还是不太明白,我已经将源EXE、DLL代码全都添加到后来编辑控制台程序的中(也就是控制台程序中,有调用运行DLL函数的语句),我知道应用程序需要需要使用事件去激活它(如窗口、按钮),但作为控制台程序,却为什么没有执行呢?难道控制台程序,也需要使用事件?
//这个程序是个监视键盘的程序,未开杀软防火墙、系统环境正常。 展开
展开全部
无需查看源码,从原理上分析即可知晓如下内容:
1、EXE是独立的程序,有主动的目的,最常见的模式就是“输入+处理+输出”,运行它总会做点儿什么实际的事儿。事毕是否有能让人一眼看到的事件发生,则要看程序的输出设计了:显性的事件有在屏幕上输出计算结果,隐性的事件有在磁盘上创建一些文件,或者干预系统中的一些对象,例如关闭另外一个程序。追求用户界面(亦称人机交互方式)友好的话,最好不要一点儿显性事件都不发生,哪怕是干隐性的活儿,最后给个通知来报告干成没干成也是好的。特例:用于批处理执行往往有免打扰的需求,这时,可以通过命令选项、配置文件选项等来设置开关。总之,运行任何一个exe,用户有明确的动机。
2、DLL是个库,属于被动式地等待别的模块来调用,如何认识这些主调模块呢?从存储角度,它们可能是在.exe中,或者在另外的.dll中;从操作系统对象来看,则主调方是某个线程的一部分程序,有人说还有进程呀,可以这么理解,在windows中,进程必然包含线程,具体调度和执行是以线程为单位。DLL也有入口函数,但入了这个口要做什么,却不是像运行exe时的用户愿望,而仅仅是为了保障本DLL中其它库函数运行不出错,常见的动作是申请资源,如开辟缓冲区。再有,DLL的入口不是用户自主进入的,而是被进程或线程调用时才受邀进入的。
强行把一个DLL改写为exe,即将源代码中library改为program,而不添加实现用户愿望的程序代码,可以想见的运行效果就是“申请资源+退出”,当然是窗口一闪而过了。
1、EXE是独立的程序,有主动的目的,最常见的模式就是“输入+处理+输出”,运行它总会做点儿什么实际的事儿。事毕是否有能让人一眼看到的事件发生,则要看程序的输出设计了:显性的事件有在屏幕上输出计算结果,隐性的事件有在磁盘上创建一些文件,或者干预系统中的一些对象,例如关闭另外一个程序。追求用户界面(亦称人机交互方式)友好的话,最好不要一点儿显性事件都不发生,哪怕是干隐性的活儿,最后给个通知来报告干成没干成也是好的。特例:用于批处理执行往往有免打扰的需求,这时,可以通过命令选项、配置文件选项等来设置开关。总之,运行任何一个exe,用户有明确的动机。
2、DLL是个库,属于被动式地等待别的模块来调用,如何认识这些主调模块呢?从存储角度,它们可能是在.exe中,或者在另外的.dll中;从操作系统对象来看,则主调方是某个线程的一部分程序,有人说还有进程呀,可以这么理解,在windows中,进程必然包含线程,具体调度和执行是以线程为单位。DLL也有入口函数,但入了这个口要做什么,却不是像运行exe时的用户愿望,而仅仅是为了保障本DLL中其它库函数运行不出错,常见的动作是申请资源,如开辟缓冲区。再有,DLL的入口不是用户自主进入的,而是被进程或线程调用时才受邀进入的。
强行把一个DLL改写为exe,即将源代码中library改为program,而不添加实现用户愿望的程序代码,可以想见的运行效果就是“申请资源+退出”,当然是窗口一闪而过了。
展开全部
你要把主程序的代码(*.dpr)贴出来,我们才能知道原因!
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
刚才看了你昨天给我的代码,怎么看怎么像是把dll直接当exe执行
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2010-12-29
展开全部
dll不能独立运行,要依赖于exe运行,我不知道你是怎么运行dll的?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
dll是动态链接库,不见得是可执行程序
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
控制台程序,应在启动控制台后,在命令窗口下运行,否则运行完后就自动退出了控制台,看不到运行结果,表现为一闪即过。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询