Не могли бы вы создать ActiveX EXE в VB6 для простой пересылки сообщений между различными сторонами? Когда кто-то вызывал его, он вызывал событие с параметрами, переданными в вызов. Ваш код VB6 и VB.NET может установить ссылку на exe-файл ActiveX, чтобы вызвать его и поглотить его события. Я не знаком с Matlab, поэтому я не знаю, будет ли он там доступен.
РЕДАКТИРОВАТЬ: вы написали, что Matlab 2009a может напрямую обращаться к .NET. Если он может обрабатывать события .NET, у вас также может быть оболочка .NET в VB6 ActiveX EXE.
Вот пример кода, который я быстро набрал.
Проект VB6 ActiveX EXE с именем проекта VB6MatlabMessenger. Каждое сообщение имеет текстовую строку 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
И тестовый VB6 нормальный exe, со ссылкой на VB6MatlabMessenger. Вот весь файл frm. Постройте это как exe, запустите несколько копий. Заполните поля назначения и текстовые поля сообщений и нажмите кнопку - вы увидите, что сообщения получены в всех exes (сообщается в списках).
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
Я начал писать библиотеку классов VB.NET, которая обертывает VB6, чтобы сделать ее доступной для .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 никогда их не уберет. Если это становится проблемой (если много сообщений отправляются без перезагрузки ПК), вы можете добавить метод к мессенджеру VB6, который инструктирует его удалить объект мессенджера из его коллекции,