2011-09-30 31 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。