0

私は、従来の VB6 Winform アプリに変更を加える任務を負っています。私が見つけたのは、このアプリが不必要に複数の DLL に分割されていることです (一部の DLL は単なる 2 つのクラスでした)。そのため、いくつかの DLL をメイン プログラムに統合する作業を行っていますが、ヘルプが必要な問題に遭遇しました。

dll の 1 つに、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 の一部であり、メイン プログラムで CTest への参照がある場合、エラーなしで CreateTestObject 行を通過します。クラスをメイン プログラムに取り込むと、型の不一致エラーがスローされます。

どんな助けでも大歓迎です、事前に感謝します。

4

3 に答える 3

2

CreateObjectは、公開されているCOMクラスでのみ機能します。したがって、CTestをメインプログラムに組み込んだため、CreateObjectは機能しなくなり、説明したとおりにエラーが発生します。

また

  • Set obj =NewCTestを使用してオブジェクトを作成します
  • または、クラスを別のDLLに残しますか?別のDLLに含まれていることによる他の副作用はありませんか?それを使用している他のアプリはありませんか?
于 2011-02-22T18:53:28.283 に答える
2

1日半後にこれを解決しました。私の場合、dll を 2 回呼び出します。初めて機能し、2回目に上記のエラーがスローされました。いくつかのプロジェクトを開いていますが、それぞれに独自の互換性設定があります。説明のつかない理由で、共通 dll への 2 番目の参照で互換性が設定されていました。バージョン互換性で正しいパスを設定し、バイナリ互換性に設定することで、問題は解消されました。

于 2012-11-21T17:47:39.343 に答える
1

CTest をメイン プログラムに直接取り込む場合は、CreateObject呼び出しは必要ありません。プログラムの一部になっているので、通常の方法でインスタンス化するだけで、正常に動作するはずです。

于 2011-02-22T18:06:59.273 に答える