我正在尝试通过注册表以编程方式创建 ODBC 连接。
使用 Windows ODBC 工具时,我注意到对于 ODBC 32,“Microsoft Access Driver (*.mdb)”正在使用 odbcjt32.dll 并且注册表中的条目将指向此位置:
"Driver"="C:\\Windows\\system32\\odbcjt32.dll"
但是当我搜索该文件时,它存在,但位于其他文件夹中:
C:\Windows\SysWOW64
我需要知道为什么,因为:
Windows 中有此 DLL 的神奇重定向吗?
谢谢澄清,
有关SysWoW64 和 system32 的一些背景信息,请参阅超级用户问题“Windows 7 上的 System32 和 SysWOW64”。所以是的,在 Windows 上有一个用于 32 位和 64 位 DLL 的“魔术重定向”。
C:\Windows\SysWOW64 中的 odbcjt32.dll 文件是 32 位版本。对于 32 位程序,路径 C:\Windows\system32\ 被重定向到 C:\Windows\SysWOW64\。您程序的当前解决方案平台是什么?x86、x64 或任何 CPU?我认为它应该是 x86 以便它可以使用 32 位驱动程序。
看看Environment.GetFolderPath
方法 withEnvironment.SpecialFolder.SystemX86
这样您就不需要对路径进行硬编码。
关于魔法重定向的附加信息
要查看 DLL 的位数,您可以使用dumpbin
。我在下面的示例中使用“odbc32.dll”。打开Developer Command Prompt
您的 Visual Studio 版本并执行以下命令:
dumpbin /headers c:\windows\syswow64\odbc32.dll
输出将包含以下行:
FILE HEADER VALUES
14C machine (x86)
现在对system32
目录中的 DLL 执行 dumpbin :
dumpbin /headers c:\windows\system32\odbc32.dll
哪个输出
FILE HEADER VALUES
8664 machine (x64)
如您所见,机器上有相同 DLL 的 x64(“64 位”)和 x86(“32 位”)版本。Windows 根据正在运行的程序的位数进行魔术重定向。64 位程序从 C:\Windows\system32 获取 DLL,32 位程序从 C:\Windows\SysWoW64 获取它。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句