2014-04-17 241 views
1

我有一個32位編譯的DLL包含vb6代碼。在我的以前的操作系統,這是Windows 7 64位,我能夠註冊和運行這個DLL在我的C#應用​​程序罰款。現在,運行Windows 8.1,當我嘗試註冊同一個DLL,它註冊的,但當我嘗試讀取DLL在我的代碼,我得到:Windows 7 64位dll註冊與Windows 8.1 64位dll註冊

Retrieving the COM class factory for component with CLSID {D19A00C4-A7F9-4E14-A5E1-D060B7EB57F3} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).

  1. 32位的DLL(編譯爲Interop.VB6Class)用於針對x86構建的ac#類 。

  2. 我試圖從我的64位的文件夾都regasm和32位的文件夾,沒有運氣

  3. 當我運行的Dependency Walker(一個可愛的小應用程序,檢查是否所有的DLL的依賴可用,並且您的CPU版本對於dll及其依賴項匹配),我仍然收到消息「找到了具有不同CPU的模塊」。

我遵循了無數的鏈接和建議,所以如果任何人都可以幫助我,我會接受你作爲我的救星,永遠稱你爲國王。

+0

你用什麼工具來註冊這個VB6 DLL - ''regasm'或'regsvr32'?此外,請不要使用/ i參數只是'C:\ Windows \ SysWow64 \ regsvr32.exe my.dll' – wqw

+0

我已經嘗試過regsvr32和regasm。我沒有使用任何參數,只是對syswow64文件夾的cd命令 –

+0

「Command Prompt(Admin)」中的所有這些?這是提升的命令提示符? – wqw

回答

0

只是一個建議,但你100%確定你的項目設置是正確的。您的平臺目標應該是x86,並且應選擇首選32位複選框。你還運行調試版本還是發佈版本?您需要爲兩種環境設置32位設置。對於命令行版本,請輸出以下內容以確保您的環境是正確的。

Console.WriteLine("OS {0}, Process {1}", System.Environment.Is64BitOperatingSystem, System.Environment.Is64BitProcess); 

我知道這是一個長鏡頭,但它可能有助於找出問題的根本原因。

+0

主要應用程序和它使用的所有dll都是爲32位構建的,因爲客戶端機器都運行在32位上。我已經解決了正常的Windows 7虛擬機的問題,因爲8.1不僅在Visual Studio中提供了各種問題,而且還提供了eclipse。 (還是)感謝你的建議。 –

相關問題