現在、ソフトウェアを VB6 から VB.NET にアップグレードしており、一度に 1 つの DLL をアップグレードしています。EXE は、多くのサード パーティの UI コントロールを備えているため、最後になります。
私が見つけた 1 つの問題は、DLL の VB6 バージョンがインターフェイス クラス (VB6 には公式に存在しない) のように動作する IProgressCallBack クラスを格納し、EXE が DLL から進行状況レポートを取得して画面に表示できるようにしたことです。ユーザーのために。
この DLL が移行されると、IProgressCallBack クラスを Interface クラスとして設定できますが、それを使用するフォームのインスタンスに「設定」することはできません。しかし、通常のクラスとして作成しても、2 つの異なるオブジェクト タイプであるため、それを使用するフォームのインスタンスに「設定」することはできません。
VB6 と VB.NET の間で IProgressCallBack クラスを動作させる方法、または .NET DLL の進行状況を VB6 UI に通知し続けるための代替ソリューションを知る必要がありますか?
両方の VB6 バージョンとその動作の例を次に示します。
VB6 DLL: IProgressCallBack
Option Explicit
Public Function NotifyProgress(ByVal Progress As Single, ByRef isCancel As Boolean) As Boolean
End Function
VB6 DLL: MainFunctions クラス
Public ProgressNotify As IProgressCallBack
Public Sub DoWork()
Dim l As Long
For l = 1 to 100
Sleep 10 'sleep for 1/100 of a second
ProgressNotify.NotifyProgress 1, False
Next
End Sub
VB6 EXE
Implements IProgressCallBack
Dim m_oMainFunc As MainFunctions
Private Sub cmdStart_Click()
Set m_oMainFunc = New MainFunctions
Set m_oMainFunc.ProgressNotify = Me
m_oMainFunc.DoWork
Set m_oMainFunc = Nothing
End Sub
Public Function IProgressCallBack_NotifyProgress(ByVal Progress As Single, isCancel As Boolean) As Boolean
lblStatus.Caption = CStr(Round(Progress)) & "%"
pbStatus.Value = Round(Progress)
Me.Refresh
End Function
ありがとう、クリス