请教关于LoadLibrary,返回错误126

yongziqd 2010-07-02 11:51:40
std::wstring path;
...
HMODULE p = LoadLibrary(path.c_str());//path为dll的绝对路径

此时p为空,用GetLastError返回的错误是126.

dll的路径没有问题,换成其他的dll也是返回错误。

求教高手。
...全文
2143 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
一木浮生 2011-02-18
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 yongziqd 的回复:]

引用 13 楼 zhao4zhong1 的回复:

用depends工具查看你加载的那个dll还依赖别的哪个dll

实在不行,单步跟踪对比一下两个工程相关C代码对应的汇编。
VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编不就啥都明白了吗。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编。)
我要调用的是jvm.dll。
用d……
[/Quote]


少了其他的dll
yongziqd 2010-08-31
  • 打赏
  • 举报
回复
解决方案:用depends工具查看你加载的那个dll还依赖别的哪个dll.看依赖的dll是否存在.
youngvc05 2010-08-19
  • 打赏
  • 举报
回复
麻烦LZ写下解决方案吧!
dean1983 2010-08-04
  • 打赏
  • 举报
回复
怎么解决得也说说三
gjskxy1 2010-07-27
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 yongziqd 的回复:]
已经解决,谢谢。结贴了
[/Quote]
如何解决啊
yongziqd 2010-07-02
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 coding_hello 的回复:]

加载的动态库应该是还依赖于别的动态库,所以加载失败。
[/Quote]但是另一个工程里用LoadLibrary调用相同的dll是没有问题的。
野男孩 2010-07-02
  • 打赏
  • 举报
回复
加载的动态库应该是还依赖于别的动态库,所以加载失败。
djjlove_2008 2010-07-02
  • 打赏
  • 举报
回复
动态链接库的问题的确很多,我也为之苦恼了不少。
yongziqd 2010-07-02
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 yongziqd 的回复:]

引用 6 楼 elpase 的回复:

你加载的是你自己的DLL吗? 换成系统的DLL试试
我都试过,都加载不了。
[/Quote]我觉得好像是工程设置的问题
yongziqd 2010-07-02
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 elpase 的回复:]

你加载的是你自己的DLL吗? 换成系统的DLL试试
[/Quote]我都试过,都加载不了。

elpase 2010-07-02
  • 打赏
  • 举报
回复
你加载的是你自己的DLL吗? 换成系统的DLL试试
yongziqd 2010-07-02
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 iihero 的回复:]

引用楼主 yongziqd 的回复:
std::wstring path;
...
HMODULE p = LoadLibrary(path.c_str());//path为dll的绝对路径

此时p为空,用GetLastError返回的错误是126.

dll的路径没有问题,换成其他的dll也是返回错误。

求教高手。

你要加载的dll所依赖的dll所在目录,应该放到%……
[/Quote]这些代码也是在一个dll工程里的。也就是说exe文件调用这个dll,
然后这个dll的某些操作会调用这些代码,然后调用另一个dll。

很诡异的是,我在另一个工程里用LoadLibrary没有问题。
我把工程拷贝,放到另一个文件夹里,LoadLibrary就出现这个问题了。
yongziqd 2010-07-02
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 aqiu348503 的回复:]

用LoadLibraryW试试
[/Quote]我定义了UNICODE,调用LoadLibrary就是调用了LoadLibraryW
iihero_ 2010-07-02
  • 打赏
  • 举报
回复
[Quote=引用楼主 yongziqd 的回复:]
std::wstring path;
...
HMODULE p = LoadLibrary(path.c_str());//path为dll的绝对路径

此时p为空,用GetLastError返回的错误是126.

dll的路径没有问题,换成其他的dll也是返回错误。

求教高手。
[/Quote]
你要加载的dll所依赖的dll所在目录,应该放到%PATH%里头
aqiu348503 2010-07-02
  • 打赏
  • 举报
回复
用LoadLibraryW试试
konta 2010-07-02
  • 打赏
  • 举报
回复
如果你要载入的DLL在内部还需要载入其它的dll,而它不存在,同样会返回126
yongziqd 2010-07-02
  • 打赏
  • 举报
回复
已经解决,谢谢。结贴了
yongziqd 2010-07-02
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 zhao4zhong1 的回复:]

用depends工具查看你加载的那个dll还依赖别的哪个dll

实在不行,单步跟踪对比一下两个工程相关C代码对应的汇编。
VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编不就啥都明白了吗。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编。)
[/Quote]我要调用的是jvm.dll。
用depends工具发现缺少两个dll,但是另一个工程中的LoadLibrary为什么能调用呢?
他们的汇编代码是一样的。
赵4老师 2010-07-02
  • 打赏
  • 举报
回复
用depends工具查看你加载的那个dll还依赖别的哪个dll

实在不行,单步跟踪对比一下两个工程相关C代码对应的汇编。
VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编不就啥都明白了吗。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编。)
yongziqd 2010-07-02
  • 打赏
  • 举报
回复
怎么办呢

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧