申明dll中的函数时,系统会自动根据程序本身是64位就引用64位的函数吗?

shinyv 2014-07-28 11:16:07
在System32和SysWOW64中都有一个SetupAPI.dll,是否程序编译成32位就会自动调用32位的dll,编译成64位就会自动调用64位的版本?我的代码在D7和XP下正常,到Win7 64时函数就调用不成功了,要么是拒绝访问要么就是找不到指定模块,我已经把程序编译成了64位,也是以管理员身份运行程序,结果还是调用dll中的函数不成功,难道申明的时候就有什么特殊的讲究?

要让下面的代码在Win7 64下正常运行,请问需要做些什么处理?
function SetupDiGetClassDevs(const ClassGuid: PGUID; Enumerator: PChar;
hwndParent: HWND; Flags: DWORD): Cardinal; stdcall;
external 'Setupapi.dll' name 'SetupDiGetClassDevsA';
...全文
232 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
fang 2014-08-05
  • 打赏
  • 举报
回复
引用 楼主 shinyv 的回复:
在System32和SysWOW64中都有一个SetupAPI.dll,是否程序编译成32位就会自动调用32位的dll,编译成64位就会自动调用64位的版本?我的代码在D7和XP下正常,到Win7 64时函数就调用不成功了,要么是拒绝访问要么就是找不到指定模块,我已经把程序编译成了64位,也是以管理员身份运行程序,结果还是调用dll中的函数不成功,难道申明的时候就有什么特殊的讲究? 要让下面的代码在Win7 64下正常运行,请问需要做些什么处理? function SetupDiGetClassDevs(const ClassGuid: PGUID; Enumerator: PChar; hwndParent: HWND; Flags: DWORD): Cardinal; stdcall; external 'Setupapi.dll' name 'SetupDiGetClassDevsA';
SetupDiGetClassDevs调用失败应该是你的COM接口的问题,你的COM接口注册的时候就要以管理员的身份注册, DLL是按搜索路径去查找的,看下你环境变量的路径设置顺序。
my1140698141 2014-08-05
  • 打赏
  • 举报
回复
武稀松 2014-07-31
  • 打赏
  • 举报
回复
64位DLL在System32中,32位DLL在SysWOW64中. 一般如果是32位程序,系统会把SysWOW64映射成System32. 除非你想去掉 这种映射. http://www.raysoftware.cn/?p=131
wangen12345 2014-07-31
  • 打赏
  • 举报
回复
win7 64位也可以运行32位程序吧,这个好像没有区别。这个可能是编译的时候环境的问题,32位的程序要在xp环境下编译,你试试。
缘中人 2014-07-30
  • 打赏
  • 举报
回复
声明应该没有区别吧
iamduo 2014-07-30
  • 打赏
  • 举报
回复
C 的版块里,也问一下去。

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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