Microsoft KB Archive/175872

= HOWTO: Sending Persistent Objects Using MSMQ in Visual Basic =

PSS ID Number: 175872

Article Last Modified on 8/28/1999

-

The information in this article applies to:


 * Microsoft Message Queue Server (MSMQ) 1.0

-



This article was previously published under Q175872



SUMMARY
This article describes how to send and receive persistent objects such as Microsoft Office documents with an Microsoft Message Queue Server (MSMQ) message.



MORE INFORMATION
The MSMQMessage.body property can be any intrinsic Variant, including string, date, currency, number as well as byte array and persistent object.

MSMQ's ActiveX implementation supports sending and receiving serialized objects which support IPersistStream and lPersistStorage. There are many persistent objects, such as all Microsoft Office documents, that can be sent as MSMQ messages.

The MSMQ support for "persistent objects" means that the MSMQ ActiveX components seamlessly invokes the object's IPersist interface when sending that object as the message body. That is, the persistent state of the object will be serialized into the message body, using the object's supplied IPersist interface. An implementation of the object's interface is assumed to be installed on the receiving end. For example, you can specify an Excel spreadsheet as the message body, but you will need Excel on the receiving end to do anything useful with it.

The following Visual Basic 5.0 example code opens a Word document using the method supplied by Word Object library (add a reference to "Microsoft Word8 Object Library" in your project), assigns the document to message body, and sends a message. Private Sub Form_Load Dim myQueueInfo As New MSMQQueueInfo Dim myMessage As New MSMQMessage Dim myNewMessage As New MSMQMessage Dim myQueue As MSMQQueue Dim myWordApp As New Word.Application Dim myWordDoc As Word.Document Dim myObj As Object

' pass the pathname of the Word document, make sure the file exists Set myWordDoc = myWordApp.Documents.Open("wordfile.Doc", False, True)

myQueueInfo.PathName = ".\PersistQ" myQueueInfo.Label = "Test Queue" myQueueInfo.Create ' Open for send Set myQueue = myQueueInfo.Open(MQ_SEND_ACCESS, MQ_DENY_NONE)

myMessage.Body = myWordDoc myMessage.Label = "Message" myMessage.Send myQueue MsgBox "Word Doc is sent" ' can verify in Explorer

myQueue.Close ' Open for Receive Set myQueue = myQueueInfo.Open(MQ_RECEIVE_ACCESS, MQ_DENY_NONE) Set myNewMessage = myQueue.Receive(wantBody:=True, _                                     ReceiveTimeout:=1000) Set myObj = myNewMessage.Body If TypeOf myObj Is Word.Document Then MsgBox "Word Doc!" Else MsgBox "?" End If     myQueue.Close End Sub

