我有一些代码可以创建对vb6 dll的引用,并使用该引用来调用该对象。我遇到了问题,因为在Debug和我的机器上它运行良好。但是,当我将它部署到服务器,这是一个Windows 2008 64服务器,它不起作用。
我收到此错误:“由于以下错误,检索具有CLSID {C259F578-EC04-4C0F-A13B-AA440F13CB73}的组件的COM类工厂失败: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)
答案 0 :(得分:5)
VB6只能构建32位dll。如果您的VB.Net代码是为任何CPU构建的,那么它将在64位系统上作为64位应用程序运行,并且无法看到32位com对象。将程序集从VB.Net重新定位到x86平台。它应该在x64系统上以32位进程开始,并且能够看到32位com对象。
还要确保使用正确的regsvr32命令来注册vb6对象。 64位系统有2种不同的版本。一个在%systemroot%\ system32(64位版本)和%systemroot%\ SysWOW64(32位)。您应该在64位com对象/ dll和32位com对象/ dll的SysWOW64版本上使用system32版本。
答案 1 :(得分:1)
DLL可能已在您的计算机上注册,但不在服务器上注册。
您可以使用REGSVR32手动注册DLL。