Hi Kevin, Thanks for the quick response. And of course it works. I thought I had tried this too but just went back and discovered I had transposed @$ to $@ (when converting the array) and of course another error due to a careless mistake. That's what happens when you look at something too long. Anyway, I'm back in business and appreciate the help.
Have a great day, Sturdy ________________________________ From: Kevin Godden [mailto:[EMAIL PROTECTED] Sent: Thursday, April 12, 2007 11:22 AM To: [EMAIL PROTECTED] Subject: Re: Need OLE COM/Variant help Hi, This worked for me for an [out, retval] VARIANT* when the returned array contained strings: # Get a list of the barcodes, this returns an OLE # array which is used slightly differently from normal # Perl arrays. my $arr = $fis->GetCurrentBarcodes(); # Convert the returned OLE Array # into a normal Perl array for ease # of use. my @barcodes = @$arr; # Get the number of elements in the array. my $barcode_count = @barcodes; print "There are $barcode_count barcodes\n"; # Loop through the array and print out # each barcode. foreach my $barcode (@barcodes) { print "$barcode\n" } It is really hard to find out how to use COM properly from Perl, there are very few example out there! I hope this helps.... Kevin. [EMAIL PROTECTED] wrote: Hi List, I am using Win32::OLE to access a custom COM interface (Secure FTP Server by GlobalSCAPE). Mostly I have been successful after much reading, experimentation and gnashing of teeth but how to retrieve a VARIANT array totally escapes me. The only interface description I have is this IDL: Returns an array of allowed IP masks. HRESULT GetAllowedMasks([out,retval] VARIANT *aMasks); The array aMasks may be any size and (I assume) contains VT_BSTR elements such as 'nnn.nnn.nnn.nnn-nnn' where any or all octets may contain a range separated by a hyphen. I can instantiate the server object and do good things with simple data types such as VT_BSTR and VT_BOOL : # For example, this will add an IP mask: $ServerObj = Win32::OLE->new( 'COMInterface.CIServer'); my $bstrMask = Win32::OLE->Variant->(VT_BSTR, '111.112.113.114-119'); my $boolTrue = Win32::OLE->Variant->(VT_BOOL, 1); $ServerObj ->AddIPAccessRule($bstrMask,$boolTrue); $ServerObj ->ApplyuChanges(); $ServerObj ->close(); But I have been totally unsuccessful in retrieving the array containing the IP Masks. At this point I'm not even sure what the code should look like, arrrgh. Unfortunately, there is a lot of the Win32::OLE doc that is over my head! Any help, examples, links, etc. will really be appreciated. Best regards, Sturdy _______________________________________________ Perl-Win32-Users mailing list [EMAIL PROTECTED] To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs ________________________________ Yahoo! Answers - Got a question? Someone out there knows the answer. Try it now <http://uk.answers.yahoo.com/;_ylc=X3oDMTEydmViNG02BF9TAzIxMTQ3MTcxOTAEc2VjA 21haWwEc2xrA3RhZ2xpbmU> . _______________________________________________ Perl-Win32-Users mailing list [EMAIL PROTECTED] To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs