- - PR -
VB6.0でMSMQを利用したアプリ間データ通信について
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-04-19 20:39
いつもお世話になっております。
質問させて頂きたいのですが、 VB6.0でMSMQ3.0を利用して アプリA(VB6.0)とアプリB(VB6.0)間でメッセージの やりとりを行なわせようと考えております。 プログラム上から【Microsoft Message Queue 3.0 Object Library】を 参照し、文字列型などのプリミティブ型での プログラム間送受信はできたのですが、 独自で作成したオブジェクトのインスタンスをキューに格納 (MSMQMessage.bodyに代入)する事ができずに困っております。 エラー内容:「インターフェイスがサポートされていません 」 .NETではsystem.Messaging名前空間のクラスを利用する事で XML形式(など)にシリアル化されたオブジェクトインスタンスをキューに格納できる 事は突き止めたのですが、 MSMQ3.0 Object Libraryを利用する場合、 自作のオブジェクトをキューにメッセージとして格納するには どの様に実装すれば良いのでしょうか? また、文献より「IPersistStream および IPersistStorageを サポートする シリアライズされたオブジェクト」ならMSMQMessage.bodyに格納できる との事でしたが、 IPersistStream・・をサポートするオブジェクトをどの様に 実装すれば良いのかもよく分かりません。。 分からない事尽くめで失礼とは存じますが、 助言頂きたく、質問させていただきました。 よろしくお願いします。 開発言語:VB6.0 OS:WinXP |
|
投稿日時: 2005-05-30 03:36
こんにちは
遅ればせながらですが。 以下のようになります。 (1)Persistentなクラスの作成 以下をMyMsgClass.cls等で保存します VERSION 1.0 CLASS BEGIN MultiUse = -1 'True Persistable = 1 'Persistable DataBindingBehavior = 0 'vbNone DataSourceBehavior = 0 'vbNone MTSTransactionMode = 0 'NotAnMTSObject END Attribute VB_Name = "MyMsgClass" Attribute VB_GlobalNameSpace = True Attribute VB_Creatable = True Attribute VB_PredeclaredId = False Attribute VB_Exposed = True Attribute VB_Ext_KEY = "SavedWithClassBuilder6" ,"Yes" Attribute VB_Ext_KEY = "Top_Level" ,"Yes" Private mstrParam1 As String Private mstrParam2 As String Public Property Get Param1() As String Param1= mstrParam1 End Property Public Property Let Param1(strNew As String) mstrParam1 = strNew End Property Public Property Get Param2() As String Param2= mstrParam2 End Property Public Property Let Param2(strNew As String) mstrParam2 = strNew End Property Private Sub Class_ReadProperties(PropBag As PropertyBag) mstrParam1 = PropBag.ReadProperty("Param1") mstrParam2 = PropBag.ReadProperty("Param2") End Sub Private Sub Class_WriteProperties(PropBag As PropertyBag) PropBag.WriteProperty "Param1", mstrParam1 PropBag.WriteProperty "Param2", mstrParam2 End Sub (2)Send Private Sub cmdSendMSMQ_Click() Dim MyBody As MyMsgClass Dim MyQueueInfo As MSMQQueueInfo Dim MyQueue As MSMQQueue Dim MyMessage As MSMQMessage On Error GoTo Send_Err Set MyBody = New MyMsgClass MyBody.Param1 = "First String" MyBody.Param2 = "Last String" Set MyQueueInfo = New MSMQ.MSMQQueueInfo MyQueueInfo.PathName = ".\\Private$\\MyQueue" Set MyQueue = MyQueueInfo.Open(MQ_SEND_ACCESS, MQ_DENY_NONE) Set MyMessage = New MSMQ.MSMQMessage MyMessage.Body = MyBody MyMessage.Send MyQueue MyQueue.Close Exit_Point: Set MyMessage = Nothing Set MyQueue = Nothing Set MyQueueInfo = Nothing Exit Sub Send_Err: MsgBox "Error " & Err.Description Resume Exit_Point End Sub (3)Recv Private Sub cmdRecvMSMQ_Click() Dim MyBody As MyMsgClass Dim MyQueueInfo As MSMQQueueInfo Dim MyQueue As MSMQQueue Dim MyMessage As MSMQMessage On Error GoTo Recv_Err Set MyBody = New MyMsgClass Set MyQueueInfo = New MSMQ.MSMQQueueInfo MyQueueInfo.PathName = ".\\Private$\\MyQueue" Set MyQueue = MyQueueInfo.Open(MQ_RECEIVE_ACCESS, MQ_DENY_NONE) 'Build the message Set MyMessage = New MSMQ.MSMQMessage Set MyMessage = MyQueue.Receive(MQ_NO_TRANSACTION, False, True, 2000, False) Set MyBody = MyMessage.Body MyQueue.Close Exit_Point: Set MyMessage = Nothing Set MyQueue = Nothing Set MyQueueInfo = Nothing Exit Sub Recv_Err: MsgBox "Error " & Err.Description Resume Exit_Point End Sub [ メッセージ編集済み 編集者: Koon3876 編集日時 2005-05-30 03:44 ] [ メッセージ編集済み 編集者: Koon3876 編集日時 2005-05-30 04:02 ] |
1