2013-07-06 144 views
11

我有一個32 COM庫,並想通過一個64位的應用程序來使用它的功能庫,我已經在互聯網上搜索,並設法讓這個workaround使用COM 32位,64位應用程序

  1. HKey_Classes_Root\Wow6432Node\CLSID\[GUID]下找到您的COM對象GUID
  2. 一旦找到,請添加新的REG_SZ (string)值。名稱應的AppID和數據應該是你剛纔搜索
  3. 添加HKey_Classes_Root\Wow6432Node\AppID\
  4. 下一個新的密鑰的新密鑰應該叫一樣的COM對象GUID
  5. 在新的密鑰相同的COM對象GUID你剛剛添加了一個新的REG_SZ (string)值,並且將其稱爲DllSurrogate。留空
  6. 創建HKey_Local_Machine\Software\Classes\AppID\

下一個新的關鍵,但它不能在Windows 7 64位工作的價值,主要的問題是,當我做的第6步 我找到了鑰匙已經存在,任何人都知道爲什麼?或者我該如何克服它?

這裏的文檔是很簡單的

+1

第3步應該創建對32位程序可見的密鑰。更準確的鍵名是HKLM \ Software \ Wow6432Node \ Classes \ AppID。第6步應該創建對64位程序可見的密鑰,相同的路徑減去「Wow6432Node」部分。如果您在步驟3中創建的密鑰在步驟6中的路徑中可見,則說明您的機器出現問題。請勿跳過Wow6432Node部分。 –

+0

你的問題可以存在嗎因爲我已經使用或使用32位或64位註冊表編輯器? 可以問題是,我註冊了32或64 regsrv32.exe庫? –

+1

你有沒有考慮重建圖書館爲64? (或者,我想一個更好的問題是,你有權訪問庫源?) –

回答

0

它可以通過registry virtualization引起的。過去我曾遇到過這樣的問題。最大的煩惱是你無法看到編輯器抱怨已存在的值或鍵。它們實際上存在於註冊表的不同部分(可能是用戶配置單元)。

好運

0

64位可執行不能調用一個32位DLL(反之亦然)。您應該將您的64位應用程序編譯爲32位。這樣您就可以使用該DLL並運行32位和64位操作系統上的所有內容。

0

註冊表只是一個適當的方式來定位所需的DLL。

如果您知道路徑,每個系統上的32位DLL,或者你可以用你的應用程序通過它,你控制你的64位應用程序的代碼,那麼你可以使用以下方法: 1)的SxS機制+艙單允許從本地文件夾加載DLL沒有在註冊並創建COM組件從它 2)使此手動http://www.codeproject.com/Articles/18433/Emulating-CoCreateInstance

的第二個解決方案是要簡單得多......

1

所以,你需要在這裏做的是啓動這32位COM組件在它自己的進程中,即通過調用與CLSCTX_LOCAL_SERVER的CoCreateInstance。

要麼這將是向前伸直與現有的DLL,或者如果你不應該與支持運行作爲本地服務器自己的32位簡單的COM組件包起來......

試圖調整註冊表是一個非贏的遊戲 - 按照它的意圖使用Dll,並節省自己的痛苦。

相關問題