我的vb.net代码在部署时无法调用我的VB6 DLL

时间:2011-09-30 17:45:37

标签: .net dll vb6

我有一些代码可以创建对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)

2 个答案:

答案 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。