DLL与EXE程序问题,DELPHI高手进

首先声明我一个菜鸟,学习DELPHI才1个月,请高手能认真详细解答。
我在网上找了一个程序源代码,主要实现代码全部在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个回答  2010-12-29
你要把主程序的代码(*.dpr)贴出来,我们才能知道原因!本回答被网友采纳
第2个回答  2010-12-30
刚才看了你昨天给我的代码,怎么看怎么像是把dll直接当exe执行
第3个回答  2010-12-29
dll不能独立运行,要依赖于exe运行,我不知道你是怎么运行dll的?
第4个回答  2010-12-29
dll是动态链接库,不见得是可执行程序
第5个回答  2011-01-01
控制台程序,应在启动控制台后,在命令窗口下运行,否则运行完后就自动退出了控制台,看不到运行结果,表现为一闪即过。

DLL与EXE程序问题,DELPHI高手进
2、DLL是个库,属于被动式地等待别的模块来调用,如何认识这些主调模块呢?从存储角度,它们可能是在.exe中,或者在另外的.dll中;从操作系统对象来看,则主调方是某个线程的一部分程序,有人说还有进程呀,可以这么理解,在windows中,进程必然包含线程,具体调度和执行是以线程为单位。DLL也有入口函数...

高分问个Delphi编程的问题,高手进 关于 LoadLibrary和@
一帮动态装载DLL,执行效率大于静态装载.因为静态装载后会多出跳转指令,跳转到真实地址.

一个关於 Delphi 7 编写DLL文件的问题。Delphi7编程高手请进!
1 制作资源文件 ICON.RES (制作方法,可以在网上找到)2 制作Dll文件,什么也不要用写,只要再,工程文件里,包含,你的资源文件名即可 library DllIcon;{ Important note about DLL memory management: ShareMem must be the first unit in your library's USES clause AND your project's (select ...

Delphi中的CoInitialize()过程问题,只有高手能回答的
1、你提到Thread.Create,看来你一定是Override这个过程;2、Classes单元中,Thread.Create调用了BeginThread,并使用CREATE_SUSPENDED标识符使刚创建的执行线程挂起,同时将执行块指向ThreadProc(ThreadProc会调用Thread.Excute)。也就是说,无论你在inherited Create之前还是之后调用CoInitialize,此时线程要么没创...

急!Delphi高手指点,我用Delphi做了个软件,为什么在别人的机器上打不...
你在编译的时候没有把运行库编译进去,所以只有在安装了Delphi的电脑上才能运行 你在编译的时候在 Project->Options打开选项对话框 Packages页,将Build with runtime packages去掉 Linker页,将Use dynamic RTL去掉 确定之后重新Build就可以了!

DELPHI idhttp问题,高手进,完全解决追加200分
1、Referer 是来路地址。浏览器里就是从那个地址点击来到此URL。有些网站是限制来路的,如果来路不是本站则会进行相应的处理,所以最好还是加上这个属性。2、idhttp会自动处理cookie,如果你想知道cookie的具体动作,可以结合tidcookiemanager使用。3、一般验证码都是session存贮的,idhttp.craete之后会自动保存...

delphi高手来~看看,瞧瞧!
其他类似问题 2012-08-10 delphi高手来看看。帮忙解释一下语句。有加分。 2012-03-25 Delphi高手来看看此代码怎么修改才能编译.高分悬赏.! 1 2009-04-13 delphi高手帮我看看这段代码 2 2010-06-01 DELPHI程序高手来看看 2008-01-14 高分 向Delphi高手求救~~~... 2 2009-06-10 delphi高手来!!!

怎样查看别人做的软件的源代码(高手进)
原因很简单,绝大多数的exe或者dll都是用高级语言诸如C\/C++\/delphi之类开发的,经过开发环境的编译得到计算机能够执行的二进制机器码文件exe,这个过程是通常是不可转逆的,但是这个过程称之为反汇编或者反编译,也就是说你可以用一些软件(比如W32Dasm等等)将exe之类进行反编译,...

十万火急,电脑反病毒高手进
”程序的文件名,再在整个注册表中搜索即可。 我们先看看微软是怎样描述svchost.exe的。在微软知识库314056中对svchost.exe有如下描述:svchost.exe 是从动态链接库 (DLL) 中运行的服务的通用主机进程名称。 其实svchost.exe是Windows XP系统的一个核心进程。svchost.exe不单单只出现在Windows XP中,在使用NT内核的...

delphi高手来!!! WM_MOUSEMOVE
同意一楼,必须要使用全局的鼠标钩子,你要写DLL了。

相似回答
大家正在搜