问题是您不能在 64 位进程中使用 32 位 DLL。但是经过长时间的搜索,我找到了一种解决方法。
可以在 32 位 DllHost.exe 进程中运行 32 位 Redemption-DLL。现在您可以通过 x64 或 AnyCPU 应用程序访问此 DllHost.exe*32,因为这是可能的。
这听起来很复杂,但相对简单。
首先在系统上注册您的 Redemption.dll (x86)。我是通过以下方式完成的:
regsvr32.exe "C:\Program Files (x86)\Redemption\Redemption.dll"
如果您在未注册 Redemption.dll 的情况下启动应用程序,您将收到如下异常:
COMException: Retrieving the COM class factory for component with CLSID {29AB7A12-B531-450E-8F7A-EA94C2F3C05F} failed due to the following error: 80040154 Klasse nicht registriert (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).
注册 32 位 DLL 后,您需要向注册表添加一些键和值。
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Wow6432Node\AppID\{29AB7A12-B531-450E-8F7A-EA94C2F3C05F}]
"DllSurrogate"=""
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\{29AB7A12-B531-450E-8F7A-EA94C2F3C05F}]
"AppID"="{29AB7A12-B531-450E-8F7A-EA94C2F3C05F}"
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\AppID\{29AB7A12-B531-450E-8F7A-EA94C2F3C05F}]
"DllSurrogate"=""
现在启动应用程序时发生的情况是系统启动了一个 DllHost 进程,该进程在 x86 环境中加载 Redemption.dll。启动 x64 应用程序后,您将在任务管理器上看到带有 COM Surrogate 描述的dllhost.exe*32。所有对 Redemption.dll 的访问现在都将路由到 DllHost。
当然,您只能在带有 x86 Outlook 客户端的 x64 系统上添加这些注册表项;)
希望这会对你们中的一些人有所帮助:)