微软官方MSDN原版Win10系统下载

现在位置: 首页  > 系统教程  > 系统帮助

如何加载.dll文件

时间:2024-11-23 15:00:14   

大家好,今天Win10系统之家小编给大家分享「如何加载.dll文件」的知识,如果能碰巧解决你现在面临的问题,记得收藏本站或分享给你的好友们哟~,现在开始吧!

文件浏览器es助手官方版系列软件最新版本下载

1.Windows无法启动 如何加载内核所需的DLL文件


  首先这是我复制的,我看了,他说的很详细,也是对的,你按照他的就可以了,,绝非恶人
现象:屏幕显示“因以下文件的损坏或者丢失,Windows无法启动:<Windows
root>system32hal.dll,请重新安装以上文件”的错误提示(如图1)。是系统引导文件损坏了,可以用故障恢复控制台来修复。
下面操作以
Windows
XP
Pro
为例,Windows
2000/2003
与此法大同小异。
一、什么是故障恢复控制台
故障恢复控制台是
Windows
2000/XP/2003
操作系统中用于修复系统的工具,它可以启用和禁用系统服务、格式化磁盘、挽救磁盘数据、修复系统故障,是我们无法进入系统(包括安全模式)时修复系统的“法宝”,被用户形象地称之为“救命稻草”。
二、如何进入故障恢复控制台
第一步:按下键盘上的“Del”键进入到BIOS设置程序。在主菜单中选择“Advanced
BIOS
Features”选项,并按“回车”键进入高级BIOS设置,再通过键盘的上的“↑”、“↓”方向键选择其中的“First
Boot
Device”选项,再按下“回车”键进入后选中“CDROM”(将第一启动设备设置为光驱)。设置完毕后,按下“F10”键存盘退出即可。
第二步:将
Windows
2000/XP/2003
安装光盘插入光驱,启动计算机,系统会自动以光盘引导,无需用户干预,待到屏幕出现相关提示时,按下键盘上任意键即可看见
Windows
XP
的安装程序画面,在提示界面中,按下“R”键选择第二项“要使用‘故障控制台’修复
Windows
XP
安装,请按R。”选项即可。
第三步:按下“R”键后,系统会自动检测机器所安装的所有操作系统,并出现登录到哪一个
Windows
的提示,键入欲进入的操作系统的序号即可,示例中键入的是“1”,回车后会提示你键入管理员密码,键入正确的管理员密码并回车,当出现“C:WINDOWS>”提示符的时侯,故障恢复控制台也就成功启动了。
要使用故障恢复控制台,每次都要翻出安装光盘,从光盘启动,比较麻烦。其实,我们还可以将故障恢复控制台安装到硬盘中,实现从硬盘启动故障恢复控制台。将
Windows
安装光盘放入光驱,然后在“运行”对话框中输入并执行“X:i386winnt32.exe/cmdcons”命令,(X为光驱盘符,请自行修改),这时就会弹出
Windows
安装程序对话框,询问你是否将故障恢复控制台安装到硬盘上。点“是”按钮即可将故障恢复控制台安装到硬盘上。重新启动计算机,你就会在多重启动菜单中发现一项名为“Microsoft
Windows
XP
Recovery
Console”的选项,通过该选项就可以进入系统故障恢复控制台了。
三、让垂危的系统起死回生
从开机错误提示中我们可以看到是“Hal.dll”文件丢失或损坏造成了系统无法启动,因此,只需从安装光盘中找到同名文件将其释放到原文件所在目录就可以了。安装光盘的“I386”文件夹是一个重要的文件夹,几乎所有的系统级文件全部位于其中。
在故障恢复控制台的命令提示符后依次输入如下命令:
C:WINDOWS>x:
//x为光驱盘符,请自行修改为你的光驱盘符
X:>CD
I386
//切换到光盘的I386文件夹下
X:>I386>expand
hal.dl_C:WINDOWSsystem32
//将安装光盘I386文件夹中的“hal.dl_”文件释放到“C:Windows项式system32”目录中,当出现“扩充了一个文件”的提示后,表明已经将“hal.dll”文件释放出来,重新启动计算机后,即可使电脑重新启动。“expand”命令是释放文件命令,在
Windows
安装光盘中所有的动态链接库文件为了缩小体积,减少对光盘空间的占用,都是经过特殊压缩的,是以“*.dl_”的形式存在的。要替换系统中丢失或损坏的同名文件,必须用“expand”命令释放到系统才行。
四、故障恢复控制台精彩实例
实例一:无法启动故障
安装有
Windows
XP
的机器,系统无法启动,提示“NTLDR
is
Missing,press
any
key
to
restart”。
这主要是由于NTLDR文件丢失或损坏所致,只要从
Windows
2000/XP/Server
2003
安装光盘的I386文件夹中提取出此文件,然后复制到C盘的根目录下覆盖即可。在故障恢复控制台中的命令提示符依次输入以下命令,重启计算机即可修复此故障。
C:WINDOWS>x:
X:>CD
I386
X:>I386>COPY
NTLDR
C:
//将安装光盘I386文件夹中的NTLDR文件复制到C盘的根目录下
实例二:多系统并存故障
机器安装有
Windows
98/XP,当从屏幕上的多重启动菜单中选择了
Windows
98
之后,出现错误提示:“访问引导扇区文件Multi(0)disk(0)rdisk(0)partition(1)BOOT,出现I/O错误”。
这主要是由于找不到启动
Windows
98
启动分区文件
Bootsect.dos
所造成的。我们在安装多操作系统的过程中,一般是先安装
Windows
98,然后再安装高版本的操作系统如
Windows
2000/XP/2003。在安装高版本系统的过程中,安装程序首先将原有的启动分区保存成
Bootsect.dos
文件,然后将自身的启动程序放入启动分区。由于
Bootsect.dos
文件是在安装过程中由安装程序创建的,无法象其它丢失或损坏的文件一样,从安装光盘拷贝覆盖一下完事。
首先在DOS提示符后键入“SYS
C:”,传递
Windows
98
的系统文件到C盘。然后,将
Windows
2000/XP/Server
2003
的安装光盘插入光驱,重新启动计算机,从光盘引导系统,当出现欢迎屏幕之后,按两次“R”键,当安装程序运行到修复任务选项的时候,选中“检查启动扇区”选项,然后将光标移动到“继续(执行所选任务)”选项上按回车,按照向导的提示进行直到“安装程序已完成修复”的提示。现在重新启动计算机,故障即可排除。
实例三:显示乱码故障
在系统启动过程中,凡是有中文的地方均显示为乱码,英文可以正常显示。
此问题主要是字库文件
bootfont.bin
文件损坏或丢失造成的,从
Windows
2000/XP/2003
安装光盘的I386文件夹中提取出此文件,复制到C盘根目录下覆盖即可。多操作系统能否正常运转,只需将安装光盘I386文件夹中的
NTLDR、ntdetect.com、Boot.ini、Bootsect.dos、bootfont.bin
这五个文件复制覆盖到C盘根目录下,再将
ntoskrnl.exe、hal.dll
这两个文件复制覆盖到
X:WindowsSystem32
文件夹下(X为操作系统所在的分区盘符),多重引导故障便不攻自破,实为一劳永逸之举。

2.如何加载动态库dll


  可以通过两种方式
  1.隐式链接(需要.dll,.lib,.h)
  2.显式链接(需要.dll,.h)
  方法1:隐式链接----需要.lib,.dll,.h文件
  隐式链接就是在程序开始执行时就将DLL文件加载到内存当中,而显示链接,是实时加载,程序需要的时候加载,不需要的时候,卸载。
  这种方式需要DLL文件,以及相应的Lib文件和头文件。
  只要没有在程序中显式链接的,都是隐式链接
  Windows程序bin目录包含了可执行文件(.exe)和动态链接库(.dlll),lib目录包含了静态库。
  步骤
  第一步:将.dll,lib,.h文件放入对应的搜索路径
●其中动态库的搜索路径点击这里查看,记住最重要的两个
1、项目当前目录(.cpp)目录
2、path环境变量中的目录
  ●静态库的搜索路径包括
1、项目当前目录.cpp目录(项目和解决方案的Debug不行)(也不是解决方案目录)
2、VC设置中的库目录(Library Directories)
  注:如果lib库不放到搜索路径中,也可以在程序中添加
  #pragmacomment(lib,"D:/DLLTest.lib")//若是相对路径,则为项目当前.cpp目录
  ●头文件搜索路径包括
1、VC设置中的包含目录(Include Directories)
  第二步:一定要在VC设置中的依赖项中添加你用到的库的名字
  第一种(对应上面每种搜索路径1):针对数量较少的库
  设置.dll,.lib搜索路径:直接将.dll,.lib,.h放入项目当前目录下(即含有项目源文件.cpp的目录)
  设置.h的搜索路径:VC设置中的包含目录(Include Directories)加入你的.h路径
  然后在链接->输入->附加依赖项中加入你要使用的静态库。
  这里只添加静态库
  
  就可以使用DLL中的函数了。
  第二种(对应上面每种搜索路径2):针对数量比较多的库(Opencv)
  如Opencv,OSG等开源库的配置
  这种方式也是通常开源库的配置方式,如Opencv,OSG等
  步骤如下
  步骤1. 添加DLL的目录
  方法1:★将dll目录(通常为bin目录)放入环境变量Path中(需要重启),path是搜索动态库的目录
  步骤2.添加静态库lib库目录和头文件的目录
  在工程中的VC++目录中添加静态库目录和头文件目录。
  步骤3.添加静态库
  在链接->输入->附加依赖项中加入你要使用的静态库(当程序中调用时,会在上述配置的库目录中寻找这个库)。
  这里只添加静态库,动态库的目录已放入环境变量中,系统会搜索这个路径的,自动加载.dll
  如RmwRoadBoundaryStraightLineDLL.lib
  然后,在程序中添加头文件 (在上述配置的头文件目录中寻找),就可以使用DLL中的函数了。
  方法2:显式链接---需要DLL(不需要.lib,.h文件)
  就是显式加载DLL库
  注意:显示链接,导出DLL的时候,采用extern “C”的方式,而不采用_declspec(dllexport),因为 _declspec(dllexport)会有一个”名字改编”的问题(采用了_cdecl调用规约的C++编译方式)。
  示例:
  如库文件对应的头文件如下
  #ifndef DLLTEST_H
  #defineDLLTEST_H
  //该宏完成在dll项目内部使用__declspec(dllexport)导出
  //在dll项目外部使用时,用__declspec(dllimport)导入
  //宏DLL_EXPORTS在.cpp中定义
  #ifdefDLL_EXPORTS
  #defineDLL_EXPORTS  extern"C"_declspec(dllexport)
  #else
  #define DLL_EXPORTS extern"C"_declspec(dllimport)
  #endif
  //函数声明
  DLL_EXPORTSint  Add(int a, int b);
  DLL_EXPORTSint  Sub(int a, int b);
  DLL_EXPORTSint  Divide(int a, int b);
  #endif//DLLTEST_H
  测试代码:
  typedefint(*Add)(int a, int b);
  typedefint(*Sub)(int a, int b);
  HINSTANCE hDLL;
  Add Add_;//函数指针
  hDLL = LoadLibrary(_T("D:/DLLTest.dll"));//加载动态链接库DLLTest.dll文件;
  Add_ = (Add)GetProcAddress(hDLL,"Add");
  intresult = Add_(5, 8);
  printf("5+8:%d\n",result);
  FreeLibrary(hDLL);//卸载.dll文件;
  以下是采用__declspec(dllexport)方式导出,不推荐这种方式需要注意函数名的书写问题!
  现在DLLTest.h中有函数(采用__declspec(dllexport)方式导出)
  #ifndef DLLTEST_H
  #defineDLLTEST_H
  //该宏完成在dll项目内部使用__declspec(dllexport)导出
  //在dll项目外部使用时,用__declspec(dllimport)导入
  //宏DLL_EXPORTS在.cpp中定义
  #ifdefDLL_EXPORTS
  #defineDLL_EXPORTS  __declspec(dllexport)
  #else
  #define DLL_EXPORTS __declspec(dllimport)
  #endif
  intDLL_EXPORTS Add(int a, int b);
  intDLL_EXPORTS Sub(int a, int b);
  intDLL_EXPORTS Divide(int a, int b);
  #endif//DLLTEST_H
  测试代码
  typedefint(*Add)(int a, int b);
  typedefint(*Sub)(int a, int b);
  HINSTANCE hDLL;
  Add Add_;//函数指针
  //也可以采用hDLL =LoadLibrary(_T("D:/DLLTest.dll"));
  hDLL =LoadLibraryA(("D:/DLLTest.dll"));//加载动态链接库DLLTest.dll文件;
  Add_ = (Add)GetProcAddress(hDLL,"?Add@@YAHHH@Z");//!!!!获取函数地址
  intresult = Add_(5, 8);
  printf("5+8:%d\n",result);
  FreeLibrary(hDLL);//卸载.dll文件;
  这里需要注意的是:GetProcAddress(hDLL,"函数名");中的函数名要是DLL中的函数名,这个函数名可以用PE Explorer软件查看
  由于采用的是VC++处理函数名方式,所以
  GetProcAddress(hDLL,"?Add@@YAHHH@Z");// GetProcAddress(hDLL,"函数名");
  而不是简单的“Add”,因为DLL中的函数名是结果VC++方式处理过的函数名
  显示调用,最好采用extern “C”的方式导出DLL
  所以采用隐式链接方式的时候,只加载需要的DLL,在附加依赖项中,只添加需要的DLL对于的lib,不要多加,否则会造成1.加大程序启动时间 2.内存浪费

以上就是关于「如何加载.dll文件」的全部内容,本文讲解到这里啦,希望对大家有所帮助。如果你还想了解更多这方面的信息,记得收藏关注本站~

本②文来*源Win10系统之家,不得自行转载,违者必追究!

相关文章

  • 如何加载.dll文件

    如何加载.dll文件

    1.Windows无法启动如何加载内核所需的DLL文件首先这是我复制的,我看了,他说的很详细,也是对的,你按照他的就可以了,,绝非恶人现象:屏幕显示“因以下文件的损坏或者丢失,Windows无法启动:system32hal.dll...
  • EasyBoot制作启动盘不支持大于4G的文件如何解决

    EasyBoot制作启动盘不支持大于4G的文件如何解决


      有不少用户使用EasyBoot(EZBoot)制作系统启动盘,发现EZboot不能完美支持超过4G的单个文件。当ISO镜像中有大于4G的单个文件时,启动时会出现如下界面:
      面对这种情况除了尽可能减小GHO和WIM文件的体积,难道没有其它方法可以解决了吗?对于GHO我们都知道可以用Ghostexp设置一下分卷大小分割一下就可以了,点视图——选项,分割成两个文件,再文件——编...
  • Win7系统libeay32.dll文件丢失的两种解决方法

    Win7系统libeay32.dll文件丢失的两种解决方法

    1.win7libeay32.dll丢失电脑管家修复出现错误libeay32.dll文件下载,解决找不到libeay32.dll的问题libeay32.dll控件常规安装方法(仅供参考):一、如果在运行某软件或编译程序时提示缺少、找不到libeay32.dll等类似提示,...
  • win10系统下cnsmin.dll出错找不到指定模块如何解决

    win10系统下cnsmin.dll出错找不到指定模块如何解决

    1.C:\WINDOWS\DOWNLO~1\Cnsmin.dll时出错找不到指定的模块?cnsmin.dll不是病毒,是3721的软件!网上前一段时间传的3721写进了驱动层无法彻底删除等等一些事后,3721调整了自己的软件。经笔者试用后发现,3721的卸载程序...