A TypeLib and 'defaultvalue' problem - only at the end ?

0 views
Skip to first unread message

R.Wieser

unread,
Jan 18, 2021, 3:59:25 AMJan 18
to
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

unread,
Jan 18, 2021, 6:11:26 AMJan 18
to
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

unread,
Jan 18, 2021, 7:03:30 AMJan 18
to
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

unread,
Jan 19, 2021, 12:17:09 AMJan 19
to
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
Reply all
Reply to author
Forward
0 new messages