Discussion:
A TypeLib and 'defaultvalue' problem - only at the end ?
(too old to reply)
R.Wieser
2021-01-18 08:59:11 UTC
Permalink
Hello all,

In a typelib (.IDL file) I'm trying to define a method with default values
for some arguments:

HRESULT MyMethod([in] variant* Arg1, [in, defaultvalue(-1)] long Arg2, [in]
long Arg3, [in] variant* Arg4, [in, defaultvalue(-1)] long Arg5, [in]
variant* Arg6, [out, retval] variant* TheResult);

From VBScript I'm trying to call the method without specifying those
"defaultvalue" arguments

TheResult = MyMethod(Arg1,,Arg3,Arg4,,Arg6)

Alas, I'm getting an error saying that the (Arg2 and Arg5) arguments are not
optional.

My question: How come ? Those "defaultvalue" arguments locations are,
AFAICS, known and fixed. What do I need to also specify to make the above
work ?

Remark: using a one or more "defaultvalue" arguments at the end of a method
(before the "retval" one) works fine.

Regards,
Rudy Wieser
JJ
2021-01-18 11:11:22 UTC
Permalink
Post by R.Wieser
Hello all,
In a typelib (.IDL file) I'm trying to define a method with default values
HRESULT MyMethod([in] variant* Arg1, [in, defaultvalue(-1)] long Arg2, [in]
long Arg3, [in] variant* Arg4, [in, defaultvalue(-1)] long Arg5, [in]
variant* Arg6, [out, retval] variant* TheResult);
From VBScript I'm trying to call the method without specifying those
"defaultvalue" arguments
TheResult = MyMethod(Arg1,,Arg3,Arg4,,Arg6)
Alas, I'm getting an error saying that the (Arg2 and Arg5) arguments are not
optional.
My question: How come ? Those "defaultvalue" arguments locations are,
AFAICS, known and fixed. What do I need to also specify to make the above
work ?
Remark: using a one or more "defaultvalue" arguments at the end of a method
(before the "retval" one) works fine.
Regards,
Rudy Wieser
The `defaultvalue` attribute requires the `optional` attribute.

HRESULT Func([in, optional, defaultvalue("something")] BSTR Text);

The remarks for both attributes in MSDN describe what are accepted by MIDL.
R.Wieser
2021-01-18 12:03:20 UTC
Permalink
JJ,
Post by JJ
The `defaultvalue` attribute requires the `optional` attribute.
I'm going to read that as "if not used at the end than ...".

But alas, when I try I get an "invalid attribute combination" ... (my
TypeLib compiler is 'mktyplib' which is .. a bit old - as old as the rest of
my Borland Assembler)

Regards,
Rudy Wieser
JJ
2021-01-19 05:17:06 UTC
Permalink
Post by R.Wieser
JJ,
Post by JJ
The `defaultvalue` attribute requires the `optional` attribute.
I'm going to read that as "if not used at the end than ...".
But alas, when I try I get an "invalid attribute combination" ... (my
TypeLib compiler is 'mktyplib' which is .. a bit old - as old as the rest of
my Borland Assembler)
Regards,
Rudy Wieser
MIDL is available in all Windows SDK versions for NT based Windows. But I
recommend at least Windows SDK for Vista if you don't have any standalone
Windows SDK yet. It's a big 1.2GB ISO download, but it's worth it.

https://www.microsoft.com/en-us/download/details.aspx?id=14477

Loading...