MSMQ ActiveX Library

After a lot of head scratching, I finally got the following code snippet to
work:

var
  QueueMessage, MessageData: Variant;

function VarToVar(Value: Variant): Variant;
begin
  Result := Value;
end;
...
QueueMessage := CreateOleObject('MSMQ.MSMQMessage');
MessageData := VarArrayCreate([0, FBufLen-1], varByte);
QueueMessage.Body := VarToVar(MessageData);

My question:  Why is the function VarToVar necessary?  If I try the line:

  QueueMessage.Body := MessageData;

then I get the EOleException 'The parameter is incorrect'

Things are working now, but I'm baffled by this.  Any ideas?