- PR -

VB6.0でMSMQを利用したアプリ間データ通信について

1
投稿者投稿内容
Cock
会議室デビュー日: 2004/12/20
投稿数: 10
投稿日時: 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
Koon3876
会議室デビュー日: 2005/05/30
投稿数: 1
投稿日時: 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

スキルアップ/キャリアアップ(JOB@IT)