簡體   English   中英

如何注冊32位外向ATL COM服務器以使其可用於64位程序?

[英]How do I register a 32-bit out-proc ATL COM server to make it available from 64-bit programs?

我們有一個32位的ATL外向COM服務器。 為了在注冊表中注冊自己,它調用CComModule::UpdateRegistryFromResource()並將經過編譯的.rgs文件的ID傳遞到同一可執行文件的資源中。

在32位系統上效果很好,但在64位系統上效果不佳。 顯然,當32位.exe在64位Windows上運行時,其注冊表訪問將被重定向,因此它將自己注冊在“ 32位HKCR”中,因此64位程序看不到其注冊。

如何以最便宜,最可靠的方式在64位HKCR中注冊同一出站服務器?

據我所知/記住,您實際上不必做任何特別的事情。

我已經檢查了我專門編寫的32位ATL COM EXE服務器,該服務器是從64位代碼( http://www.pretentiousname.com/adobe_pdf_x64_fix/index.html )調用的,並且注冊代碼完全是樣板文件(除非我忘記了,今天看不到我必須改變的東西)。

除非調用CoCreateInstance(Ex)的64位端代碼明確傳遞了CLSCTX_ACTIVATE_64_BIT_SERVER,否則COM應在需要時自動檢查32位注冊表。 (即使通過了CLSCTX_ACTIVATE_64_BIT_SERVER,它仍然可能會通過。MSDN尚不清楚該標志是首選項還是要求。我認為無論如何都不會傳遞它。)

也許問題不在於如何注冊COM服務器,而是其他原因。 還是注冊的服務器的64位版本損壞了,也許是在較早的開發/測試中才被選中,而該版本是在32位服務器上選擇的並且失敗了?

順便說一句,在Windows 7和較早的OS版本上,注冊表的各個部分是32/64位拆分的,但是我從經驗中知道,您不需要在Vista,Windows 7和Server上做任何特殊的事情2008 R2。 我還沒有在其他操作系統版本(例如XPx64)上進行過親自測試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM