LoadLibrary加载动态库失败

LoadLibrary加载动态库失败【1】LoadLibrary加载动态库失败的可能原因以及解决方案:(1)dll动态库文件路径不对。此场景细分为以下几种情况:1.1文件路径的确错误。比如:本来欲加载的是A文件夹下的动态库a.dl

大家好,又见面了,我是你们的朋友全栈君。

【1】LoadLibrary加载动态库失败的可能原因以及解决方案:

(1)dll动态库文件路径不对。此场景细分为以下几种情况:

1.1 文件路径的确错误。比如:本来欲加载的是A文件夹下的动态库a.dll,但是经过仔细排查原因,发现a.dll动态库竟然被拷贝到B文件夹下去了。

若真遇到这种低级错误,建议你找个没人的墙角蹲下用小拇指逆时针划圈圈去吧。。。

1.2 实参传值错误。比如:实参类型为LPCWTR,经常都会因为字符串转换导致实参事与愿违。

网上的经验总结实例。某程序员经过一番周折后通过以下语句调用成功

hDll = LoadLibrary(TEXT(“user32.dll”));

再经过一番百度google后发现,原来是字符格式惹的祸。

这里的LoadLibrary实际使用了LoadLibraryW而非LoadLibraryA,因此需要UNICODE字符串(宽字符串),而非窄字符串。 如下:

#ifdef UNICODE

#define LoadLibrary  LoadLibraryW

#else

#define LoadLibrary  LoadLibraryA

#endif // !UNICODE

在C/C++代码中,直接使用””定义的字符串为窄字节串,而windows头文件中提供的TEXT宏可以根据是否定义了UNICODE宏来自动选择字符串类型。

因此,利用TEXT宏使其自动选择了正确的字符集,dll调用成功。

(2)dll里有全局变量初始化失败或dllmain函数返回false。这种情况需要根据自己的业务代码具体分析排除与定位。

(3)64位进程调用了32位dll动态库的问题。

微软公司的官方网站针对这个问题描述如下:

在64位的windows系统中,一个64位进程不能加载一个32位dll,同理一个32位进程也不能加载一个64位dll。

如果您真都没有源码,只能如此“尴尬”的想正常运行,可以参见资料《64位进程调用32位dll的解决方法 / 程序64位化带来的问题和思考》

(4)其他原因

4.1 LoadLibrary函数跟LoadLibraryEx函数装载dll的机制不一样,前者在装载dll遇到与该dll依赖的其他dll时会自动装载,而后者不会。

网上有加载自己的dll无法成功的例子,排除路径问题的话(最好全路径),就要考虑该dll是否依赖到其它的dll。

 

Good Good Study, Day Day Up.

顺序 选择  循环 总结

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/154368.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 信息熵、信息增益、信息增益比「建议收藏」

    信息熵、信息增益、信息增益比「建议收藏」信息熵“信息熵”是度量样本集合纯度最常用的一种指标。假定当前样本集合D中第k类样本所占的比例为pk(k=1,2,…,|y|),则D的信息熵定义为:Ent(D)的值越小,则D的纯度越高。如果上面的解释不容易理解,那么下面再通俗地解释一下:首先来看一下信息熵这个公式在数轴上的表示:可以看到,在概率为0.5的时候,信息熵是最大的(为1)。我们可以把信息熵理解为“不确定性”,当概率为0.5…

    2025年5月25日
    0
  • linux配置本地yum源 百度经验_centos7yum源的配置

    linux配置本地yum源 百度经验_centos7yum源的配置由于redhat的yum在线更新是收费的,如果没有注册的话不能使用,如果要使用,需将redhat的yum卸载后,重启安装,再配置其他源,以下为详细过程:1.删除redhat原有的yumrpm-aq|grepyum|xargsrpm-e–nodeps2.下载yum安装文件wgetwgetwgetwget3.进行安装yumrpm-ivhpython-iniparse-0.3.1-2….

    2022年8月13日
    1
  • window.location.Reload()和window.location.href 区别

    window.location.Reload()和window.location.href 区别

    2021年10月31日
    44
  • 易语言跳出循环 c,易语言教程循环控制(到循环尾和跳出循环)[通俗易懂]

    易语言跳出循环 c,易语言教程循环控制(到循环尾和跳出循环)[通俗易懂]到循环尾()和跳出循环()是易语言对循环的两种控制方式,教程分别了举例师范讲解。一、官方源码到循环尾调用格式:〈无返回值〉到循环尾()-系统核心支持库->流程控制英文名称:continue本命令转移当前程序执行位置到当前所处循环体的循环尾语句处。本命令为初级命令。操作系统需求:Windows、Linux、Unix跳出循环调用格式:〈无返回值〉跳出循环()-系统核心支持库…

    2022年7月13日
    12
  • node.js 安装与环境变量配置

    node.js 安装与环境变量配置1.进入node.js官网或者node.js中文网下载node.js最新版本(windows系统的.msi)2.双击.msi文件进行安装,默认会把node.js和npm加到path当中,进入cmd运行以下命令查看版本。其实,node目录下的node.exe就是一个绿色的可执行文件,拷到哪儿都可以用~(引用别人的话)3.配置全局模块的安装路径到node-global文件夹,…

    2022年5月18日
    37
  • 修改配置nginx,限制无良爬虫频率

    修改配置nginx,限制无良爬虫频率

    2021年8月30日
    57

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号