2011-09-30 59 views
0

我有一些代碼創建一個vb6 dll的引用並使用該引用來調用該對象。我有一個問題,因爲在調試和我的機器上它工作得很好。但是,當我將它部署到服務器是Windows 2008 64服務器它不起作用。我的vb.net代碼不能調用我部署的VB6 DLL

我得到這個錯誤:「檢索COM類工廠CLSID組件{C259F578-EC04-4C0F-A13B-AA440F13CB73}失敗,原因是出現以下錯誤:80040154沒有註冊類(從HRESULT異常:0x80040154的(REGDB_E_CLASSNOTREG) )「。

這是我的代碼。

ClasstoInstantiate = ExportObject 
    If UCase(pRow("TypeVB6").ToString()) = "TRUE" Then 
     classType = Type.GetTypeFromProgID(ClasstoInstantiate, True) 
    Else 
     classType = Type.GetType(ClasstoInstantiate, True) 
    End If 

    Dim o As Object = Activator.CreateInstance(classType) 

回答

5

VB6只能夠建立32位dll。如果您的VB.Net代碼是爲任何CPU構建的,那麼它將在64位系統上以64位應用程序的形式運行,並且無法看到32位com對象。將您的程序集從VB.Net重定向到x86平臺。它應該以32位程序開始,然後在x64系統上開始,並能夠看到32位com對象。

另外請確保您使用正確的regsvr32命令來註冊您的vb6對象。在64位系統上有兩種不同的版本。一個在%systemroot%\ system32(64位版本)和%systemroot%\ SysWOW64(32位)。您應該使用64位com對象/ dll上的system32版本和32位com對象/ dll的SysWOW64版本。

+0

真棒謝謝一堆我曾嘗試將其中一個項目的溶劑轉換爲x86,但它似乎他們都必須轉換。 – Rico

+0

我做了這個工作後,再次感謝您的幫助 – Rico

1

該DLL可能在您的機器上註冊,但不在服務器上。

您可以使用REGSVR32手動註冊DLL。