我正在尝试使用EasyHook挂钩一个简单的流程。我正在x64环境中编程/调试,并在Visual Studio C#上用AnyCpu配置编译我的DLL。
问题是当在注入库函数中尝试使用这个DLL(在另一个项目中,同样的解决方案,也使用AnyCpu进行编译)时:
RemoteHooking.Inject(TargetPID,“DivisionInject.dll”,“DivisionInject.dll”,ChannelName); (第二个参数用于32位系统。第三个参数用于64位。)
我不知道为什么这行会抛出异常: System.ArgumentException:给定的64位库不存在!
我认为AnyCpu用于创建我的DLL,我可以在32位系统和64位上使用相同的文件(DLL)。这是错的吗?
感谢。
答案 0 :(得分:1)
AnyCpu设置基本上意味着确定如何加载或执行进程或库将基于/在执行/加载点。编译为AnyCpu的库可以通过32位和64位调用进程加载。编译为AnyCpu的可执行文件将在64位机器上运行64位进程,在32位机器上运行32位进程。有关AnyCpu目标概念的讨论,请参阅this主题。
如果您的调用者编译为64位并设置为AnyCpu,它将尝试加载64位库。
答案 1 :(得分:0)
虽然现在不太常见,但可以在 64 位计算机上安装 32 位 Windows。在这种情况下,只有为 32 位/AnyCpu 构建的 exe 才会运行。反之亦然。 32 位机器只能运行 Windows 32 位。 因此,O/S 位数是决定因素,而不是硬件。
64 位机器上的 Windows 32 位在企业商店中更为常见,它们不想同时支持操作系统或在 Windows-64 上运行的 32 位旧版应用程序。