win7 64位加载DLL报错

zengwenjian 2014-05-23 08:50:58
在win7 32位下能正常与运行,在win7 64位下编译通过,运行时出错,提示:
{"无法加载 DLL“TDF_API_Windows_v2.dll”: 找不到指定的模块。 异常来自 HRESULT:0x8007000B)。"}

我用下面两种方法试过了还是不行:
1、在IDE中将目标平台设置成x86(VS是在项目的属性->生成->目标平台)
2、如果DLL中调用了其他的DLL,需要将其他的DLL一同编译

http://blog.csdn.net/xxdddail/article/details/13775907,这个网页上提到的用Dependency工具看到的第一个层级的几个DLL都有放到项目下面。

求助: 这种情况怎么处理,另外64位环境和32位环境调用DLL的差异,是因为寻址位数不一样还是什么原因啊?
...全文
981 20 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
fly4free 2014-05-27
  • 打赏
  • 举报
回复
你自己用 VC LoadLibrary 一下这个dll,看 返回与 GetLastError() 都是多少。 我感觉是这个dll (与其所依赖的dll)所需要的 VC++运行时,你的机器上没有…… 或者是链接版本不对,你主机是 x64,还是 ia64, 那个dll呢? 看依赖的 ws2_32.dll 图表是红色的,感觉就是有些 调用的 函数,ws2_32.dll 里没有,其他dll同理。 再有,你机器上装的 VC++2010 运行时是不是sp1的? 总之,很奇怪!
zengwenjian 2014-05-27
  • 打赏
  • 举报
回复
引用 18 楼 fly4free 的回复:
发个 dependency 的截图?

fly4free 2014-05-26
  • 打赏
  • 举报
回复
发个 dependency 的截图?
zengwenjian 2014-05-26
  • 打赏
  • 举报
回复
引用 7 楼 iyomumx 的回复:
用Dumpbin检查下TDF_API_Windows_v2.dll的依赖: dumpbin /dependents TDF_API_Windows_v2.dll dumpbin工具在%VisualStudio安装路径%VC\bin\x86_amd64\(64位版)下
我试过了,查看了1级目录的依赖,另外把这个8个依赖都拷贝到Debug文件夹去了,还是不行,然后用进程追踪软件把运行是所有出错的DLL或是找不到路径的DLL都拷贝到debug目录了,花了4、5个小时都没搞定,专心搞这个都忘记发帖提问了。
zengwenjian 2014-05-26
  • 打赏
  • 举报
回复
引用 14 楼 Saleayas 的回复:
看看 TDF_API_Windows_v2.dll 所链接的 依赖项是否都是 x64 的??
我用Depend看像是3个依赖DLL是64位另外几个不是,但不确定因为我不知道怎么看的,只是有3个上面有64的字样
smthgdin_020 2014-05-26
  • 打赏
  • 举报
回复
有些dll 32位下没问题,64位下就不行。比如:Interop.MSScriptControl.dll。
Saleayas 2014-05-26
  • 打赏
  • 举报
回复
看看 TDF_API_Windows_v2.dll 所链接的 依赖项是否都是 x64 的??
zengwenjian 2014-05-26
  • 打赏
  • 举报
回复
引用 8 楼 CsethCRM 的回复:
1.命令行键入: cscript.exe %SYSTEMDRIVE%\inetpub\adminscripts\adsutil.vbs SET W3SVC/AppPools/Enable32bitAppOnWin64 1 即设置IIS6允许32位程序运行在64位机器上 2.重新注册.net frameWorks %SYSTEMROOT%\Microsoft.NET\framework\v2.0.\aspnet_regiis.exe -i 试试这个
哥们这样试的原因或是理由是?
zengwenjian 2014-05-26
  • 打赏
  • 举报
回复
引用 10 楼 save4me 的回复:
生成平台设置为x86
这个试过不行。
zengwenjian 2014-05-26
  • 打赏
  • 举报
回复
谢谢,各位了。 我之前描述问题错了,现在更正如下: 我要加载的“TDF_API_Windows_v2.dll”有两个版本,1个是32位的,1个是64位的(都是用VS2010生成的),然后我再WIN7 32位系统调用32位的DLL是正常的,但是我在win7 64位系统调用两个版本的DLL都失败了。 错误提示: {"无法加载 DLL“TDF_API_Windows_v2.dll”: 找不到指定的模块。 异常来自 HRESULT:0x8007000B)。"} 因为我的电脑系统是WIN7 64位,所以我希望能在64位的系统下面调用其中一个版本的DLL。
save4me 2014-05-24
  • 打赏
  • 举报
回复
生成平台设置为x86
安得权 2014-05-23
  • 打赏
  • 举报
回复
1.命令行键入: cscript.exe %SYSTEMDRIVE%\inetpub\adminscripts\adsutil.vbs SET W3SVC/AppPools/Enable32bitAppOnWin64 1 即设置IIS6允许32位程序运行在64位机器上 2.重新注册.net frameWorks %SYSTEMROOT%\Microsoft.NET\framework\v2.0.\aspnet_regiis.exe -i 试试这个
iyomumx 2014-05-23
  • 打赏
  • 举报
回复
用Dumpbin检查下TDF_API_Windows_v2.dll的依赖: dumpbin /dependents TDF_API_Windows_v2.dll dumpbin工具在%VisualStudio安装路径%VC\bin\x86_amd64\(64位版)下
xugan666 2014-05-23
  • 打赏
  • 举报
回复
引用 5 楼 zengwenjian 的回复:
[quote=引用 3 楼 xugan666 的回复:] 发布的时候选择64位即可。。默认系统是32位。
我本机系统是64位的(开发环境),现在本机就没法调试,一运行就报上面提示的错误。[/quote]...........
zengwenjian 2014-05-23
  • 打赏
  • 举报
回复
引用 3 楼 xugan666 的回复:
发布的时候选择64位即可。。默认系统是32位。
我本机系统是64位的(开发环境),现在本机就没法调试,一运行就报上面提示的错误。
zengwenjian 2014-05-23
  • 打赏
  • 举报
回复
引用 1 楼 fly4free 的回复:
0x8007000B 意思是:试图加载格式不正确的程序。 另外 “找不到指定的模块” , TDF_API_Windows_v2.dll 是多少位的,你把它放在哪里了
我把生成平台改成X86他就提示“0x8007000B”,生成平台改成X64就提示0x8007007E,另外我不确定这个TDF_API_Windows_v2.dll是多少位的,因为他看起来有2个版本的DLL(32位和64位,这个在我64位系统下面无法运行的是64的)。我把这个DLL放在项目的Debug目录下。 其实64位DLL和32位DLL要在生成时特别设定吗?是不是在生成哪里设置的(VS是在项目的属性->生成->目标平台)?
xugan666 2014-05-23
  • 打赏
  • 举报
回复
发布的时候选择64位即可。。默认系统是32位。
Justin-Liu 2014-05-23
  • 打赏
  • 举报
回复
这个dll在64位系统运行不了吧
fly4free 2014-05-23
  • 打赏
  • 举报
回复
0x8007000B 意思是:试图加载格式不正确的程序。 另外 “找不到指定的模块” , TDF_API_Windows_v2.dll 是多少位的,你把它放在哪里了
fly4free 2014-05-23
  • 打赏
  • 举报
回复
突然发现……你是在问 VC++ 的问题吗? 如果是C#的话,默认是 Any CPU,framework自动解释 在64位系统下,默认是以64位进程启动的。 你设置平台为 x86, 然后把32位的 TDF_API_Windows_v2.dll 放到 "X:\Windows\SysWOW64" 下(X为你系统所在盘符),看看是否正常了。

111,097

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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