dll加载遇到的问题

dll加载有两种形式,分别是隐式加载和显式加载。

隐式加载在编译的时候就将dll文件编译到可执行文件中去,程序发布的时候可以不用讲dll带着.缺点是,这样编译出来后,程序会很大。

显式加载是指在程序运行过程中,需要用到dll里的函数时,再动态加载dll到内存中。这种加载方式因为是在程序运行后再加载的,所以可以让程序启动更快,而且dll的维护更容易,使得程序如果需要更新,很多时候直接更新dll,而不用重新安装程序.只是这种加载方式,函数调用稍微复杂一点。

我在项目中采用的是隐式加载,遇到的问题是"无法打开.lib文件"的错误,解决方法是检查dll文件和lib文件放的位置。

vs2017中放在vcxproj、vcxproj.user、vcxproj.filter三个文件所在的文件夹里面,与这三个文件放在一起后编译错误被消掉。

另外使用xerces解析xml的时候,报错的时候注意检查“XERCES_CPP_NAMESPACE_USE”是否添加。

参考:https://blog.csdn.net/enjoy5512/article/details/51548795

原文地址:https://www.cnblogs.com/kgtone/p/9517038.html

时间: 2024-10-27 18:06:32

dll加载遇到的问题的相关文章

利用dll加载漏洞实现远程代码执行

微软的"不安全dll加载"漏洞涉及Windows XP至Windows 7等多个版本的操作系统.由于Windows存在加载未指明完整路径的dll文件的机制,可能导致用户在使用第三方软件.玩游戏.听音乐时,会加载由木马 病毒伪装而成的dll文件,从而让木马病毒运行起来. 例如,当我们实例化一个对象,Windows会尝试从当前工作目录中加载一个或多个DLL动态库文件.如果我们能诱使受害者,打开一个包含木马的 DLL文件目录,那么攻击者的木马将被执行.从而导致受害者的电脑可以被攻击者远程执行

ACCESS DLL加载错误

如今还在用ACCESS 2003,太懒没办法,升到2010变化太大了,做个Access的转版挺麻烦的.况且大家都在使用2003,也就懒得搞了. 但问题是office 2003已经out了,(Office 2003 已于 2014 年 4 月 8 日退役了).必须用新版的word和excel.公司里有些同事会用其他办法搞定,如wps,转换器之类的. 今天有同事打开2003版的mdb时发现,打开xx窗出现错误,什么加载错误之类的.开始以为是office update坏的事,于是重装Access200

模块“XXX.dll”加载失败

具体问题:模块“XXX.dll”加载失败 请确保该二进制存储在指定的路径中,或者调试它以检查该二进制或相关的.DLL文件是否有问题  找不到指定的模块. 1.在安装C++软件的时候,有时候安装失败提示“请确保二进制储存在指定的路径中,或者调试他以检查该二进制或相关的DLL文件”,这个应该是自己的电脑没有安装VC运行库,可以去微软下载安装. 2.还有以下方法. 解决win7运行批处理出错不能注册dll等问题 引用: http://blog.csdn.net/nxeexn/article/detai

Dll加载总是出问题,显示无法加载

我从网上找了一个类似的问题,具体的内容如下 创建了个mfc的共享链接库,里面只有这样一个加法 _declspec(dllexport) int add(int a,int b){ return a+b ; } 然后创建了个mfc的exe,选择对话框,添加一个按钮,事件里面 extern int add(int a,int b) ; void CDllTestDlg::OnBnClickedBtnAdd() { CString str ; m_xx= add(1,35) ; UpdateData(

DLL加载失败的情况分析

场景说明: 将断点定位在上面的HMODULE instance = ::LoadLibrary(filename.c_str());函数,当加载ueroutealg.dll的时候,发现句柄为空,然后通过添加如下代码:DWORD dwError = GetLastError(); 在该函数的背后,收集到加载失败的错误码:[127]-找不到指定的程序.点击VS菜单,然后选择工具,点击错误查找,输入127. 解决分析: 1)  一般的情况是程序采用了动态加载的方式来运行,在加载DLL的过程,发现程序需

模拟DLL加载

#include <stdio.h> #include <malloc.h> #include <sys/stat.h> typedef int (*PFUNC)(int,int); typedef struct { int Position; int Length; }Fun; typedef struct { int num; Fun *pFun; }Lib; int main() { int FileSize =0; char FileName[] = "

固定dll的加载基址的方法

调试dll的时候会有一件事情比较烦人,就是dll加载的地址不会很固定(默认设置下编译的dll基址总是0x10000000,多个同基址的dll加载时,后面的肯定会被重定位),这给前后多次调试时对比分析结果造成了一些麻烦,要解决这个问题,有两种办法.方法一:直接修改dll文件PE头中的ImageBase为一个不大可能被占用的地址.但是这个方法有一个小小的局限,就是有些文件是存在校验的,改了文件之后会出一些问题,比如拒绝加载之类的. 这种情况就要用第二种方法了. 方法二:动态修改dll的加载基址 当然

dll的两种加载方式(pend)+ delayload

看过关于动态库的调用例子,于是决定动手做一做:dll的对外接口声明头文件,Mydll.h: //Mydll.h #include <stdio.h> #include <stdlib.h> #include "Public.h" #define DLL_EXPORT /*extern "c"*/ __declspec(dllexport) //导出 #define CUST_API _stdcall //标准调用 DLL_EXPORT voi

加载dll、lib库

2.是关于如何加载dll或lib库的.可以看这篇bog   Qt调用dll中的功能函数点击打开链接 **************************************************************************************************************************************************** 声明: 事先我已经自己动手写了一个简单的dll文件(myDLL.dll),C版接口的.并且用我前两篇有