in reply to OLE optional parameter required

The error is thrown by the IDispatch implementation of your OLE server. Perl and Win32::OLE are just reporting the error.

But anyways, the correct way to specify a "Nothing" pointer with Win32::OLE is:

use Win32::OLE::Variant qw(nothing); # ... $OleObj->Method($strFirstArg, nothing);
where nothing() really is just a convenience function for Win32::OLE::Variant->new(VT_DISPATCH)

Replies are listed 'Best First'.
Re^2: OLE optional parameter required
by Anonymous Monk on Mar 02, 2010 at 22:12 UTC

    Holy dooley, holy mackerel, holy perl! It works. I grovel at your superior wisdom and offer prayers of thanks to the monks.

    My only question now is why the more or less saintly Jan Dubois does not say so in his erudite teachings on Win32::OLE at http://aspn.activestate.com/ASPN/CodeDoc/libwin32/OLE/Win32/OLE/TPJ.html instead of suggesting undef and named parameters? Does this mean there is something wrong with our server - that optional parameters are not working properly?

      Yes, the optional parameter doesn't seem to be optional. This may be due to the fact that it is hard (or maybe impossible) to specify even NULL as a default value for VT_DISPATCH parameters in IDL.

      It should still be possible to implement this at the server level if you write your own IDispatch implementation rather than relying on it being autogenerated based on the typelib. It is rather questionable if it would be worth it though.