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.

顺序 选择  循环 总结

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(1)


相关推荐

  • namecheap mx记录配置邮箱

    namecheap mx记录配置邮箱

  • 平衡二叉树的数据结构_红黑树数据结构

    平衡二叉树的数据结构_红黑树数据结构红黑树Java集合系列之TreeMap详细介绍(源码解析)和使用示例代码来自算法第四版红黑树并不追求“完全平衡”——它只要求部分地达到平衡要求,降低了对旋转的要求,从而提高了性能。红黑树实际上是由2-3-4树转换而来,红黑树能够以O(log2n)的时间复杂度进行搜索、插入、删除操作。此外,由于它的设计,任何不平衡都会在三次旋转之内解决。当然,还有一些更好的,但实现起来更复杂的数据

  • java中json转map

    java中json转mapjson转map转载自https://stackoverflow.com/questions/443499/convert-json-to-mapTypemapType=newTypeToken<Map<String,Map>>(){}.getType();Map<String,String[]>son=newGson().fromJson(easyString,mapType);

  • 安装 | 最新MATLAB 2020b(64位)安装教程完整版[通俗易懂]

    安装 | 最新MATLAB 2020b(64位)安装教程完整版[通俗易懂]博主github:https://github.com/MichaelBeechan博主CSDN:https://blog.csdn.net/u011344545精简安装链接:https://blog.csdn.net/u011344545/article/details/109728674下载链接链接:https://pan.baidu.com/s/1g61g2qJO2MtZVkeMsuxhuQ提取码:打赏连接:https://blog.csdn.net/u011344545/article/

  • 分子模拟软件amber_【免费】指南针模拟计算课堂第五期:邂逅分子模拟「建议收藏」

    分子模拟软件amber_【免费】指南针模拟计算课堂第五期:邂逅分子模拟「建议收藏」不知不觉,在大家的陪伴和参与下,科学指南针的免费模拟计算线上课堂,将在本周六(12.7号)来到最后一期啦!一前四期的内容,我们分别讲了计算化学的整体情况、分类的量子化学和第一性原理的基本知识普及和操作演示。错过了前四期的小伙伴,也不要失望,每期课程都有视频,文章末尾有获取前四期视频的方式,欢迎领取。二第五期的课程,我们将带大家再了解下分子模拟的相关内容。本期课程包括分子动力学和力场的一些…

  • springboot实战第四章-SpringMVC项目快速搭建

    springboot实战第四章-SpringMVC项目快速搭建

发表回复

您的电子邮箱地址不会被公开。

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