Mr.*_*Boy 1 windows dll visual-studio visual-c++
通常在尝试运行使用DLL的EXE时,如果DLL丢失,则会出现标准的Windows错误:
程序无法启动,因为您的计算机缺少XXX.dll.尝试重新安装该程序以解决此问题.
在调用任何代码之前,这似乎是内置于EXE中的...它是如何工作的,以及在Visual Studio中构建项目时如何设置它?
编辑:
在我的特定场景中,我实际上有一个DLL,它对其他DLL有"静态"依赖,所以如果那些不存在,注册我的DLL失败,这有点难以诊断.但我宁愿不手动列出所使用的DLL函数,因为有很多!
链接到DLL时,有两种方法可以执行此操作:隐式链接和显式链接.你遇到的是隐式链接的失败.
隐式链接通过称为可执行映像中包含的导入表的操作来运行,该映像使用PE(可移植可执行文件)格式.PE格式定义了导入和导出表.导出表包含DLL导出的函数列表及其入口点.导入表包含对其他模块的隐式依赖性.
当可执行文件启动时,加载程序读取导入表,然后尝试加载所有引用的DLL和这些DLL中的所有函数.如果找不到DLL,DLL无法正确加载,或者DLL不包含引用的函数,则可能会失败.在您的情况下它失败,因为加载器XXX.dll在DLL搜索路径中找不到.
链接器将生成导入表.在C++中,这通常通过该DLL的.lib文件来完成.
显式链接是代码调用LoadLibrary和GetProcAddress加载DLL及其功能的地方.通常,当您要编写可在不同系统上运行的应用程序时,可以使用此方法.例如,您可能希望使用仅在某些版本的操作系统上出现的某些功能,但在较旧版本的操作系统上运行时会降级为某些其他行为.
在引用链接到DLL时,不应使用术语static.静态链接是指函数的实现包含在图像中而不是包含在外部库中.
有关该主题的MSDN文章解释了所有这些以及更多内容.
| 归档时间: |
|
| 查看次数: |
1588 次 |
| 最近记录: |