VB6 で ActiveX EXE を作成して、さまざまな関係者間でメッセージを簡単に転送できますか? 誰かがそれを呼び出すと、呼び出しに渡されたパラメーターでイベントが発生します。VB6 および VB.NET コードは、ActiveX exe への参照を確立して、それを呼び出し、そのイベントをシンクできます。私は Matlab に詳しくないので、そこでアクセスできるかどうかはわかりません。
編集: Matlab 2009a は .NET に直接アクセスできると書いています。.NET イベントをシンクできる場合は、VB6 ActiveX EXE で .NET ラッパーを使用することもできます。
これが私がすぐに思いついたサンプルコードです。
プロジェクト名が VB6MatlabMessenger の VB6 ActiveX EXE プロジェクト。各メッセージには、テキスト文字列 Destination (目的の受信者を何らかの方法で識別する) と、メッセージを含む文字列があります。
'MultiUse class VB6Messenger
Option Explicit
Public Event MessageReceived(ByVal Destination As String, ByVal Message As String)
Public Sub SendMessage(ByVal Destination As String, ByVal Message As String)
Call Manager.RaiseEvents(Destination, Message)
End Sub
Private Sub Class_Initialize()
Call Manager.AddMessenger(Me)
End Sub
Friend Sub RaiseTheEvent(ByVal Destination As String, ByVal Message As String)
RaiseEvent MessageReceived(Destination, Message)
End Sub
'BAS module called Manager
Option Explicit
Private colMessengers As New Collection
Sub AddMessenger(obj As VB6Messenger)
colMessengers.Add obj
End Sub
Sub RaiseEvents(ByVal Destination As String, ByVal Message As String)
Dim obj As VB6Messenger
For Each obj In colMessengers
Call obj.RaiseTheEvent(Destination, Message)
Next obj
End Sub
そして、VB6MatlabMessenger への参照を含む、テスト VB6 通常の exe。これがfrmファイル全体です。これを exe としてビルドし、いくつかのコピーを実行します。送信先とメッセージのテキスト フィールドに入力し、ボタンをクリックします。メッセージがすべての exe で受信されていることがわかります (リストボックスに報告されます)。
VERSION 5.00
Begin VB.Form Form1
Caption = "Form1"
ClientHeight = 3090
ClientLeft = 60
ClientTop = 450
ClientWidth = 4680
LinkTopic = "Form1"
ScaleHeight = 3090
ScaleWidth = 4680
StartUpPosition = 3 'Windows Default
Begin VB.ListBox lstEvents
Height = 1620
Left = 120
TabIndex = 3
Top = 1320
Width = 4455
End
Begin VB.TextBox txtMessage
Height = 375
Left = 120
TabIndex = 2
Text = "Message"
Top = 840
Width = 2295
End
Begin VB.TextBox txtDestination
Height = 375
Left = 120
TabIndex = 1
Text = "Destination"
Top = 240
Width = 2295
End
Begin VB.CommandButton cmdSendMessage
Caption = "Send Message"
Height = 495
Left = 2640
TabIndex = 0
Top = 360
Width = 1575
End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit
Private WithEvents objMessenger As VB6MatlabMessenger.VB6Messenger
Private Sub cmdSendMessage_Click()
objMessenger.SendMessage txtDestination, txtMessage.Text
End Sub
Private Sub Form_Load()
Set objMessenger = New VB6MatlabMessenger.VB6Messenger
End Sub
Private Sub objMessenger_MessageReceived(ByVal Destination As String, ByVal Message As String)
lstEvents.AddItem Now() & " RECEIVED - " & Destination & ", " & Message
End Sub
VB6 をラップして .NET からアクセスできるようにする VB.NET クラス ライブラリの作成を開始しました。私はこれをテストしていません。VB6MatLabMessenger への参照があります。
Public Class VBNETMatlabMessenger
Private WithEvents objVB6Messenger As VB6MatlabMessenger.VB6Messenger
Public Event MessageReceived(ByVal Destination As String, ByVal Message As String)
Public Sub SendMessage(ByVal Destination As String, ByVal Message As String)
objVB6Messenger.SendMessage(Destination, Message)
End Sub
Public Sub New()
objVB6Messenger = New VB6MatlabMessenger.VB6Messenger
End Sub
Private Sub objVB6Messenger_MessageReceived(ByVal Destination As String, ByVal Message As String) Handles objVB6Messenger.MessageReceived
RaiseEvent MessageReceived(Destination, Message)
End Sub
End Class
これで始められるかもしれません。VB6 メッセンジャー オブジェクトは、メッセンジャーが内部的にそれらへの参照を保持するため、永続的に存続することに注意してください。そのため、COM はそれらを整理しません。これが問題になる場合 ( PC を再起動せずに多くのメッセージが送信される場合)、コレクションからメッセンジャー オブジェクトを削除するように指示するメソッドを VB6 メッセンジャーに追加できます。