我正在使用[DllImport]
属性将本机 DLL 导入到我的应用程序中,但它加载的 DLL 不在本地 bin 文件夹中。它是从系统上的其他地方加载的,但我不知道在哪里。
它可以在我的开发机器上运行,但不能在干净的机器上运行。
我已启用 Fusion 日志记录,并且仅显示托管程序集。
我已经使用 Sysinternals Process Explorer 转储了该进程,这告诉我它位于C:\Windows\System32
但我在 Windows 资源管理器中看不到该文件。
可能值得注意的是,我运行的是 64 位 Windows 7,但 DLL 仅支持 x86,因此我不得不强制我的应用程序为 x86。是否有某种重定向可以更改 x86 文件的加载位置?
DllImport 是一个定制的 Silicon Labs USB 驱动程序。 [DllImport("SiUSBXp.dll")]
我还使用命令提示符执行了dir si*
在 System32 文件夹中,但该文件不存在。
The 文件系统重定向器 http://msdn.microsoft.com/en-gb/library/windows/desktop/aa384187%28v=vs.85%29.aspx将启动:
%windir%\System32 目录是为 64 位应用程序保留的。创建 64 位版本的 DLL 时,大多数 DLL 文件名不会更改,因此 32 位版本的 DLL 存储在不同的目录中。 WOW64 通过使用文件系统重定向器隐藏了这种差异。
在大多数情况下,每当 32 位应用程序尝试访问 %windir%\System32 时,访问都会重定向到 %windir%\SysWOW64。
因此,即使进程认为它加载了 DLLSystem32
,它可能加载自SysWOW64
是的,这些数字与你的预期是错误的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)