in reply to Win32::OLE (Variants by reference)

Hi, @dawn

I'm going to guess that the reason you've not have much response to your post is that no-one is familiar with the spellcheck application you're using.

A couple of things you could check, though:

  1. Does the Server.Spellcheck object actually support OLE automation?
  2. Can you automate it in VB(A|S) using the code you've written?

Our (my) ignorance of your spellchecker aside, there doesn't seem to be anything wrong with your code which would also account for the lack of replies. My advice would be: "try it in VBS and see if it works".

Oh, and Win32::OLE isn't perfect either. Some stuff that works in VBS and "runs" perfectly in perl doesn't actually "do" anything - but I've only seen that happen when trying to automate Outlook, so far.

HTH - Mark

PS: if the reference is a list doesn't that mean OLE will cast is as an Variant Array() or worse, a Collection?

Replies are listed 'Best First'.
Re: Re: Win32::OLE (Variants by reference)
by @dawn (Initiate) on Mar 30, 2004 at 12:28 UTC
    Hi maa

    I was thinking about what you said PS: and in part I think you were correct! It is not documented but I have found out by testing and finally by the author note that any "string variant -> Variant(VT_BSTR, '');" regardless if it is passed by reference "VT_BYREF" or not, can not be used if that "string variant" will be used in a method -> $object->Method(); because the $object->Method(); will assign the "variant" to a "string variant value"!

    So in short, by doing this....

    my $sugg = Variant(VT_BSTR|VT_BYREF, "");

    I was assigning $sugg to an absolute value = "", that could not be changed by the method -> $object->Method(); that I was using it in...

    The correct way to pass a "string variant" to a method -> $object->Method(); that will change or assign a value to the "string variant" is listed below...

    my $sugg = Variant(VT_VARIANT|VT_BYREF, "");

    Authors Note...
    After the method call $sugg will hold the returned value for the $sugg variant. It will still be variant but the overloading converts it to string representation automatically.

    A side note (to help others you might run into this problem)...

    Any "OLE String -> VT_BSTR or OLE Boolean -> VT_BOOL" that are placed in a "object Method" and they will return a value by the "method" that they are placed in should be called "VT_VARIANT"

    Thanks Mark

    @dawn