遗留VB6应用程序在ActiveX创建对象期间抛出类型不匹配错误

时间:2011-02-22 17:47:12

标签: vb6 activexobject

我的任务是改变传统的VB6 Winform应用程序。我发现这个应用程序被不必要地分成多个DLL(一些DLL只是几个类)。所以,我正在努力将一些DLL合并到主程序中,但我遇到了一个问题,我可以使用一些帮助。

其中一个dll包含一个名为CTest(Test.cls)的类。主程序在以下代码行中使用它。 strProgId是一个命名另一个DLL的字符串。

Dim objTest As CTest 

Set objTest = CreateTestObject(strProgId)

Public Function CreateTestObject(strProgId As String) As Object
10        On Error GoTo ErrorHandler
20        Set CreateTestObject = CreateObject(strProgId)
30        Exit Function
ErrorHandler:
40        UpdateErrorInfo "CreateTestObject", "Globals", strProgId
50        HandleError
End Function

以下是CTest的内容

Option Explicit


Private m_strName As String
Private m_strDescription As String
Private m_cnnADO As ADODB.Connection

Public Property Get Name() As String
10        Name = m_strName
End Property

Public Property Let Name(strNewName As String)
10        m_strName = strNewName
End Property

Public Property Get Connection() As ADODB.Connection
10        Set Connection = m_cnnADO
End Property

Public Property Set Connection(cnnADO As ADODB.Connection)
10        Set m_cnnADO = cnnADO
End Property

Public Property Get Description() As String
10        Description = m_strDescription
End Property

Public Property Let Description(strNewDescription As String)
10        m_strDescription = strNewDescription
End Property

Public Function Run(ByVal strSTMType As String, _
                    instInstruments As CInstruments, objResults As CTestResults) As Boolean

End Function

如果CTest仍然是DLL的一部分,并且我在主程序中有它的引用,它将通过CreateTestObject行而没有错误。如果我将类引入主程序,则会引发类型不匹配错误。

感谢任何帮助,谢谢你。

3 个答案:

答案 0 :(得分:2)

CreateObject仅适用于公开可见的COM类。因此,因为您已将CTest引入主程序,CreateObject将不再起作用,并且会像您描述的那样引发错误。

要么

  • 通过Set obj = New CTest
  • 创建对象
  • 或者只是将课程留在单独的DLL中?你确定它在一个单独的DLL中没有其他副作用吗?没有其他应用程序使用它?

答案 1 :(得分:2)

我在一天半之后解决了这个问题。在我的情况下,我两次调用DLL。它第一次工作,第二次抛出上面的错误。我打开了几个项目,每个项目都有自己的兼容性设置。由于某些无法解释的原因,对公共dll的第二个引用具有兼容性。通过在版本兼容性中设置正确的路径并将其设置为二进制兼容性,问题得以解决。

答案 2 :(得分:1)

如果您直接将CTest引入主程序,那么您不需要CreateObject调用 - 只需以正常方式实例化它,现在它是您程序的一部分,它应该可以正常工作。

相关问题