① 电脑qq打不开,卸载重装,什么添加dll都不行,求大神帮忙,qq.exe无法找到入口 无法定位程序输入点
一、如果在运行某软件或编译程序时提示缺少、找不到等类似提示,您可下载拷贝到指定目录即可(一般是system系统目录或放到软件同级目录里面),或者重新添加文件引用。
二、下载下来文件之后,先将其解压(一般都是rar压缩包), 然后根据您系统的情况选择X86/X64,X86为32位电脑,X64为64位电脑。默认都是支持32位系统
三、使用腾讯电脑管家,点开电脑诊所之后,搜缺失的dll文件,会自动筛选出来,然后你只需要点立即修复即可!
② MFC 程序编译连接通过后无法启动
DLL文件(Dynamic Linkable Library 即动态链接库文件),是一种不能单独运行的文件,它允许程序共享执行特殊任务所必需的代码和其他资源
比较大的应用程序都由很多模块组成,这些模块分别完成相对独立的功能,它们彼此协作来完成整个软件系统的工作。可能存在一些模块的功能较为通用,在构造其它软件系统时仍会被使用。在构造软件系统时,如果将所有模块的源代码都静态编译到整个应用程序 EXE 文件中,会产生一些问题:一个缺点是增加了应用程序的大小,它会占用更多的磁盘空间,程序运行时也会消耗较大的内存空间,造成系统资源的浪费;另一个缺点是,在编写大的 EXE 程序时,在每次修改重建时都必须调整编译所有源代码,增加了编译过程的复杂性,也不利于阶段性的单元测试。
Windows 系统平台上提供了一种完全不同的较有效的编程和运行环境,你可以将独立的程序模块创建为较小的 DLL 文件,并可对它们单独编译和测试。在运行时,只有当 EXE 程序确实要调用这些 DLL 模块的情况下,系统才会将它们装载到内存空间中。这种方式不仅减少了 EXE 文件的大小和对内存空间的需求,而且使这些 DLL 模块可以同时被多个应用程序使用。Windows 自己就将一些主要的系统功能以 DLL 模块的形式实现。
一般来说,DLL 是一种磁盘文件,以.dll、.DRV、.FON、.SYS 和许多以 .EXE 为扩展名的系统文件都可以是 DLL。它由全局数据、服务函数和资源组成,在运行时被系统加载到调用进程的虚拟空间中,成为调用进程的一部分。如果与其它 DLL 之间没有冲突,该文件通常映射到进程虚拟空间的同一地址上。DLL 模块中包含各种导出函数,用于向外界提供服务。DLL 可以有自己的数据段,但没有自己的堆栈,使用与调用它的应用程序相同的堆栈模式;一个 DLL 在内存中只有一个实例;DLL 实现了代码封装性;DLL 的编制与具体的编程语言及编译器无关。
在 Win32 环境中,每个进程都复制了自己的读/写全局变量。如果想要与其它进程共享内存,必须使用内存映射文件或者声明一个共享数据段。DLL 模块需要的堆栈内存都是从运行进程的堆栈中分配出来的。Windows 在加载 DLL 模块时将进程函数调用与 DLL 文件的导出函数相匹配。Windows 操作系统对 DLL 的操作仅仅是把 DLL 映射到需要它的进程的虚拟地址空间里去。DLL 函数中的代码所创建的任何对象(包括变量)都归调用它的线程或进程所有。
调用方式:
1、静态调用方式:由编译系统完成对 DLL 的加载和应用程序结束时 DLL 卸载的编码(如还有其它程序使用该 DLL,则 Windows 对 DLL 的应用记录减1,直到所有相关程序都结束对该 DLL 的使用时才释放它,简单实用,但不够灵活,只能满足一般要求。
隐式的调用:需要把产生动态连接库时产生的 .LIB 文件加入到应用程序的工程中,想使用 DLL 中的函数时,只须说明一下。隐式调用不需要调用 LoadLibrary() 和 FreeLibrary()。程序员在建立一个 DLL 文件时,链接程序会自动生成一个与之对应的 LIB 导入文件。该文件包含了每一个 DLL 导出函数的符号名和可选的标识号,但是并不含有实际的代码。LIB 文件作为 DLL 的替代文件被编译到应用程序项目中。
当程序员通过静态链接方式编译生成应用程序时,应用程序中的调用函数与 LIB 文件中导出符号相匹配,这些符号或标识号进入到生成的 EXE 文件中。LIB 文件中也包含了对应的 DL L文件名(但不是完全的路径名),链接程序将其存储在 EXE 文件内部。
当应用程序运行过程中需要加载 DLL 文件时,Windows 根据这些信息发现并加载 DLL,然后通过符号名或标识号实现对 DLL 函数的动态链接。所有被应用程序调用的 DLL 文件都会在应用程序 EXE 文件加载时被加载在到内存中。可执行程序链接到一个包含 DLL 输出函数信息的输入库文件(.LIB文件)。操作系统在加载使用可执行程序时加载 DLL。可执行程序直接通过函数名调用 DLL 的输出函数,调用方法和程序内部其 它的函数是一样的。
2、动态调用方式:是由编程者用 API 函数加载和卸载 DLL 来达到调用 DLL 的目的,使用上较复杂,但能更加有效地使用内存,是编制大型应用程序时的重要方式。
显式的调用:
是指在应用程序中用 LoadLibrary 或 MFC 提供的 AfxLoadLibrary 显式的将自己所做的动态连接库调进来,动态连接库的文件名即是上面两个函数的参数,再用 GetProcAddress() 获取想要引入的函数。自此,你就可以象使用如同本应用程序自定义的函数一样来调用此引入函数了。在应用程序退出之前,应该用 FreeLibrary 或 MFC 提供的 AfxFreeLibrary 释放动态连接库。直接调用 Win32 的 LoadLibary 函数,并指定 DLL 的路径作为参数。LoadLibary 返回 HINSTANCE 参数,应用程序在调用 GetProcAddress 函数时使用这一参数。GetProcAddress 函数将符号名或标识号转换为 DLL 内部的地址。程序员可以决定 DLL 文件何时加载或不加载,显式链接在运行时决定加载哪个 DLL 文件。使用 DLL 的程序在使用之前必须加载(LoadLibrary)加载DLL从而得到一个DLL模块的句柄,然后调用 GetProcAddress 函数得到输出函数的指针,在退出之前必须卸载DLL(FreeLibrary)。
正因为DLL 有占用内存小,好编辑等的特点有很多电脑病毒都是DLL格式文件。但不能单独运行。
动态链接库通常都不能直接运行,也不能接收消息。它们是一些独立的文件,其中包含能被可执行程序或其它DLL调用来完成某项工作的函数。只有在其它模块调用动态链接库中的函数时,它才发挥作用。
dll和内存管理
在Win32中,DLL文件按照片段(sections)进行组织。每个片段有它自己的属性,如可写或是只读、可执行(代码)或者不可执行(数据)等等。
DLL代码段通常被使用这个DLL的进程所共享;也就是说它们在物理内存中占据一个地方,并且不会出现在页面文件中。如果代码段所占据的物理内存被收回,它的内容就会被放弃,后面如果需要的话就直接从DLL文件重新加载。
与代码段不同,DLL的数据段通常是私有的;也就是说,每个使用DLL的进程都有自己的DLL数据副本。作为选择,数据段可以设置为共享,允许通过这个共享内存区域进行进程间通信。但是,因为用户权限不能应用到这个共享DLL内存,这将产生一个安全漏洞;也就是一个进程能够破坏共享数据,这将导致其它的共享进程异常。例如,一个使用访客账号的进程将可能通过这种方式破坏其它运行在特权账号的进程。这是在DLL中避免使用共享片段的一个重要原因。
当DLL被如UPX这样一个可执行的packer压缩时,它的所有代码段都标记为可以读写并且是非共享的。可以读写的代码段,类似于私有数据段,是每个进程私有的并且被页面文件备份。这样,压缩DLL将同时增加内存和磁盘空间消耗,所以共享DLL应当避免使用压缩DLL。[1][2]
[3]找到DLL文件地址:C:\WINDOWS\system32\****.dll时出错(****就是你的那个找不到的文件名)
开始--运行--msconfig--启动--找到和你说的类似的选项****--取消勾--确定,然后
1,开始-运行-输入:regedit,然后回车
2,选择“我的电脑”,然后点击“文件”-“导出”-随便起个名字点“保存”。这样做的目的是备份一下注册表,以免误操作后及时恢复。恢复的方法是,找到你刚才保存的文件,双击它,然后选择“允许导入”即可。
3,选择“我的电脑”,按F3键,然后输入“****”,点击“查找下一个”,找到后一定要核对是不是****.dll文件,因为你给的文件名不全,如果确认,对该项点“右键”选“删除”。“此时可以输入****.dll进行查找,结果出来后要看后面的数值部分,不能光看文件名称,只要有****.dll在的文件不管它边上还写没写别的(如:****.dll,load),都要删除!”
4,然后再按F3键-删除,直到提示“没有找到相应选项”为止。
5,重新启动计算机,看看系统有没有问题。
注,如果出现了其它严重问题,请恢复注册表。
③ 用vs编译C++文件时无法启动程序,并且找不到指定文件怎么办
1、用 VS 打开工程,点击菜单 项目 - 属性。
④ WIN7 64位 下VS2015编译通过,但是无法启动程序 提示 WinTab32.dll 已经加载但是找不到入口点怎么办
方法/步骤
1、通常在运行中注册动态库文件:regsvr32 msi.dll (按回车键执行命令)都能顺利通过。
2、但也有出错提示:
模块“xxx.dll”已加载,但找不到入口点DLLRegisterServer
请确保xxx.dll为有效的DLL或OCX文件,然后重试。
3、这就要看当前是单个动态链文件不能注册,还是所有的文件都是注册无效。如果是单个文件注册无效,那就是这个动态链文件有问题,找到相同的操作系统(32位或者64位)相应的路径中,复制一个(网上下载也行),保存到自己的操作系统中即可。64位操作系统的路径是:C:\Windows\System32 文件夹内。
4、如果是64位的操作系统,那么提取、保存正确的32位动态链文件的路径是:
C:\Windows\SysWOW64 文件夹内。
5、如果所有的动态链文件注册都无效,那就是当前的操作系统无权限。可以加载权限注册即可。步骤如下:
开始→所有程序→附件→右键点击命令提示符(CMD)→以管理员身份运行。
6、然后,再使用命令注册: regsvr32 msi.dll
提示:可以先复制命令,再点击左上角,在弹出来的菜单中点选编辑→粘贴命令。
7、注册成功之后会有提示。
8、也可以将绝对路径添加上去(先去该路径查找是否有这个动态链文件):
regsvr32 C:\Windows\SysWOW64\msi.dll
9、最后,注意命令参数的应用,有时候需要先解除注册,之后再注册才可以。
1右键添加以管理员身份运行。
⑤ c语言入门求助。编译的时候无法启动程序,找不到指定文件,怎么解决呢,这是截图。
操作方法不对造成的原因。解决方法如下:
1、应该先建项目>空白项目。
⑥ rundll32.exe 无法找到入口 无法定位程序输入点 DeleteWadCacheForNetworks于动态链接库 WinINet.dll上
最近,多种软件都出现了一个启动时的错误提示 “无法定位程序输入点_except_handler4_common于动态链接库msvcrt.dll上”。 出现这个提示情况是:Windows Xp 系统; 软件包括:window live writer 2009, windows messenger 2009, firefox 3.5 等非常新的版本。 这个提示出现后,点击确定,并不影响程序的使用。这个问题出现的原因,其实微软自己的问题。可谓是微软的Vista 后遗症吧。 在Vista 系统里,有个挺酷的功能,就是“程序缩略图”,有点3D效果,这个功能,调用了 dwmapi.dll 这个库,而 dwmapi.dll 又引用了 msvcrt.dll 中的 _except_handler4_common 功能。 然而,在XP系统中,系统自带的 msvcrt.dll 和 Vista 中的 msvcrt.dll 版本不同, 并没有这个 _except_handler4_common ,结果就出现了启动程序时,遇到的 “无法定位程序输入点_except_handler4_common于动态链接库msvcrt.dll上”的错误提示。 解决方法: 将c:\windows\system32 下的 dwmapi.dll 改名,例如:改为 dwmapi.dll.bak。 更改后,可以直接打开ps,省去运行时间! 更改后dwmapi.dll数据库文件属性会改变,图标会变成未知应用程序文件,不必惊慌,根本就不用管它。 收集自网络: 无法定位程序输入点_except_handler4_common于动态链接库msvcrt.dll上解决方式如下: 这是由于sp3加载的驱动造成的;只需要将C:\WINDOWS\system32\dwmapi.dll重新命名一下即可以解决。 原因: 浅谈Windows环境软件故障调试与分析 大家好,我是Eric,今天,我将与大家一起分享一个软件故障的调试与分析案例,希望给大家提供一个解决Windows下软件错误的基本分析思路和供参考的一类解决方法。看完本例,您将会初步了解到Dll Entry Point错误的一些基本知识,也将接触到像Winbdg、Dependency Walker一类的专业调试、分析工具软件的基本使用,在这里我也和大家一起分享并探讨。 本例中出现错误的软件是中国移动飞信2008版客户端,具饥掘体现象是每次双击图标启动该程序时总会收到一个错误信息对话框——标题为“FetionFX.exe - Entry Point Not Found”,内容为“The procere entry point _except_handler4_common could not be located in the dynamic link library msvcrt.dll.”。如下图所示: 、 以前在台式机中文版Microsoft Windows XP Professional with Service Pace 2上使用这个客户端时并没有出现该问题,但是今年9月份我将笔记本计算机的操作系统安装为Microsoft Windows XP Professional with Service Pace 3的英文版,然后于10月初安装飞信客户端之后就一直存有这个问题,直到今天我才有一块集中的空余时间来分析解决。之前我搜索过网络,但是答案均是“系统缺少msvcrt.dll,下载一个就好了”或者是“msvcrt.dll版本不正确,下载一个替换即可”,为了图简便,我也试过,但是根本不奏效。可是我发现没有解决也可以正常使用飞信,只是每次要弹出这个错误消息,所以也没急着管。哈哈~幸好今天解决掉了,心得是解决软件故障不能浮于表面,欲发掘内在问题和根本原因,还得自己架设环境手动分析,因为软件太多了,错误的种类也举晌太多了,一切还是得具体情况具体分析阿~~下面我们一起来看看整个过程吧:(全部的分析调试过程不止烂答核下面的这些,但是经过解决这个问题,以下整理出来的思路应该是最简短并且能够找到问题原因的) 首先,我们让该问题重现,即双击飞信客户端的桌面图标,让其弹出该错误对话框。错误提示出现了,我们先不急着点击“OK(确定)”按钮,而是启动一个调试程序。(本例中使用着名的Microsoft Windbg工具进行调试分析)然后在“File(文件)”菜单中选择“Attach to a Process...(附加到一个进程)”,选择当前的飞信客户端的进程“FetionFX.exe”。这里之所以要选择Attach to a Process就是因为我们要将调试器跟踪到当前这个产生错误的进程,然后从内存中实时察看相关的线程堆栈甚至API函数的调用。Windbg中还支持其他的几种类型的调试,须根据具体情形按需选择。附加到该进程之后的结果如下图所示: 然后,我们可以在图中清晰地看到,当系统加载到“c:\Program Files\China Mobile\Fetion\dwmapi.dll”时挂起,就是图中的"Warning: Break-in time out, suspending.",在Windows中的表现也就是弹出了上述的错误对话框,并且我们还没有点击“确定”按钮,于是程序暂时挂起。因此,我们可以判断,FeionFX.exe启动时加载的位于“c:\Program Files\China Mobile\Fetion\”目录下的dwmapi.dll在执行某个函数过程的时候遇到了错误。那么究竟是什么样的函数呢?根据错误对话框的信息,我们可以初步猜测是MSVCRT.dll中的_except_handler4_common。于是,我们需要查找一下当前进程中有关该过程的现状,所以执行"x msvcrt!_except_handler*"命令,返回的结果也在上图中的底部。在Windbg中,x是查找符号的命令,可以用来查找全局变量的地址或过程的地址。比如x kernel32!*显示Kernel32.dll中的所有可见变量,数据结构和过程。*号是通配符,代替任意的字符串,为了查找全部的,我们需要使用该通配符。(其实如果你执行“x msvcrt!_except_handler4_common”你会发现没有任何结果,也就是找不到,其实这也就是出现该错误的原因,我们后文分析。因此退一步不输入"4_common",查找所有_except_handler过程) 结果告诉我们,进程中msvcrt.dll存有的过程有_except_handler2以及_except_handler3,而恰恰没有_except_handler4。鉴于以上返回结果,我们可以初步断定,错误的起因是因为程序不能执行MSVCRT.DLL中的_except_handler4_common过程,而且原因是当前缺少这个。此时,我们需要借助Microsoft Dependency Walker进行辅助分析并且确认。 我们启动Microsoft Dependency Walker,打开该dwmapi.dll,可以发现,该DLL文件的运行将会首先调用MSVCRT.DLL,而且下图中也标示出来了,在当前调用的MSVCRT.DLL中,缺少一个函数"_except_handler4_common",这起好与我们看到的错误现象相以及Windbg分析的结果吻合。如下图所示: 此时,我们可以进一步断定,要么是DLL版本不对,要么就是dwmapi.dll有问题。而这个程序调用的是XP系统的%systemroot%\system32下面的MSVCRT.DLL,从移动飞信官方得知,该程序就是针对XP/Vista开发的,且朋友中文版XP SP3中运行得很正常,于是我确认了一下本机该文件的版本,结果是“7.0.2600.5512 (xpsp.080413-2111)”,看来没有什么问题,是版本7.0.2600。于是我们得查一查另外一个文件了——dwmapi.dll,为什么它要载入MSVCRT.Dll并且调用其中并不存在的一个过程呢? 接下来,我们查看位于飞信文件夹下的dwmapi.dll。察看版本信息,得到“6.0.6000.16386 (vista_rtm.061101-2205)”,问题就在这里!看到了吗?这个位于飞信安装目录下的文件怎么会来自Vista正式发布版??怎么会用到XP的程序执行之中???要知道,这个文件之所以能够使用全部功能是因为在Vista环境之下,很多新的DLL文件中带有新的函数,正好可以被它调用。那么我们猜想,是不是Vista版本下的MSVCRT.DLL就存在一个新版本——即第4版的_exception_handler4呢?我们从Microsoft Windows Vista RTM中提取出位于%systemroot%\system32下面的MSVCRT.DLL,其版本为“7.0.6001.18000 (longhorn_rtm.080118-1840)”,然后再次使用Dependency Walker打开,发现其中果然存在该新的函数!即“_except_handler4_common”。如下图所示: 到这里,问题就已经清楚了。正是由于本机的飞信客户端在启动时调用了用于Vista的DLL组件dwmapi.dll,而该DLL又要尝试调用一个Vista下msvcrt.dll才有的过程,才出现了该错误提示。因为我们发现,该错误提示并不影响之后程序的正常使用,而且我们所使用的环境是Windows XP而非Vista,所以推断该调用dwmapi.dll的过程是非必要的,于是将其重命名或是删除到回收站,再次启动飞信客户端,错误提示消失了,迎来的是程序正常的使用…… 之后我查阅了大量的KB资料以及Visual Studio的MSDN资料,发现_except_handler是VC++编译器自带的一个内部异常处理。而版本4的_except_handler4_common handler又仅存在于Vista以及之后的系统之中。而且值得注意的是,很多这样子的错误都是由于系统中存在有来自更高级版本系统的文件造成的,而文件的来源于一般有几种,一般是修改系统时自己放进去的或者别的安装程序带入的,也有情况是盗版改版的操作系统中存有的,再有就是本例中的情形——安装程序可同时用于Windows XP以及Windows Vista。可能是由于XP英文版与中文版的环境的不同,飞信客户端的启动选择了加载调用为Vista准备的dwmapi.dll从而产生了此错误。 注:本例中并没有介绍使用Dependency Walker的“Profile(剖析)”功能,因为该飞信客户端的启动不是靠单文件的,因此比较复杂,而且本例中因为该错误不能成功剖析整个启动过程。借助其他工具,可以得到,其实飞信客户端的启动过程是先通过Fetion.exe加载FetionFX.exe然后再加载“VMDotNet\v2.0.50727”下的FetionVM.exe进行的,于是我们可以只对FetionVM.exe进行剖析,而且当前环境也只能这样了。剖析过后同样能够发现问题,如下图所示:
⑦ 程序编译过了,但是无法运行出结果是怎么回事
编译过了没错误,说明你的代码语法没错误。运行结果不对,是你的代码逻辑有问题,仔细检查代码逻辑流程是不是不对,调试调试。
⑧ 关于c语言程序函数入口地址即main函数地址问题
不同的系统环境,内存环境肯定不一样,得到不同的必然的。
32位系统,地址为4个字节,16进制,都应为8位的,
在你的结果里,应该都是把前面的0省略掉了哈
⑨ 有时Visual C++编译后程序无法运行
这个说明你的程序执行期间对发生了错误,配陵建议把你工程下的Debug文件夹全部删除,重新编译一遍程序,当烂敬然,按照你说的,这个时候编译应该没有问题,所以你还要在程饥卖慎序中打断点,调试一下,就可以找到问题出在哪里了。
⑩ vs2008下用C写了一个程序,在编译连接的时候为什么提示未定义入口点
你有没有建立工程啊,在VC++ 2008中,要运行后缀为cpp的文件,必须在工程下!
文件->新建->项目->(项目迅判类型)Win32->(Visual Studio已安装的模版)Win32控制台应用程序->(输入项目名称后)->下一步->(附加选项)空项目->完成
在左边的窗口里面,右键->添加->新建项,就可以闭昌困看到可以见了C++文件轿念了.输入完名称,就可以进行输入了,把上面的代码输进去,Ctrl + F5,就可以运行了!
如果直接按F5的话,如果程序没有错误,就会跳出,你会看不到结果,通常在测试自己的代码有没有错误时采用.