mirror of https://github.com/adamdruppe/arsd.git
Make named arguments runtime
This commit is contained in:
parent
b8420c6039
commit
27aafc79b4
12
com.d
12
com.d
|
@ -395,7 +395,7 @@ struct ComProperty {
|
||||||
}
|
}
|
||||||
|
|
||||||
ComResult opCall(Args...)(Args args) {
|
ComResult opCall(Args...)(Args args) {
|
||||||
return callNamedArgs!([])(args);
|
return callWithNamedArgs!Args(null, args);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Call with named arguments
|
/// Call with named arguments
|
||||||
|
@ -404,10 +404,10 @@ struct ComProperty {
|
||||||
///
|
///
|
||||||
/// So to call: `Com.f(10, 20, A: 30, B: 40)`, invoke this function as follows:
|
/// So to call: `Com.f(10, 20, A: 30, B: 40)`, invoke this function as follows:
|
||||||
/// ---
|
/// ---
|
||||||
/// Com.f().callNamedArgs!(["A", "B"])(10, 20, 30, 40);
|
/// Com.f().callWithNamedArgs!(["A", "B"])(10, 20, 30, 40);
|
||||||
/// ---
|
/// ---
|
||||||
/// Argument names are case-insensitive
|
/// Argument names are case-insensitive
|
||||||
ComResult callNamedArgs(string[] argNames, Args...)(Args args) {
|
ComResult callWithNamedArgs(Args...)(string[] argNames, Args args) {
|
||||||
DISPPARAMS disp_params;
|
DISPPARAMS disp_params;
|
||||||
|
|
||||||
static if (args.length) {
|
static if (args.length) {
|
||||||
|
@ -420,8 +420,8 @@ struct ComProperty {
|
||||||
disp_params.rgvarg = vargs.ptr;
|
disp_params.rgvarg = vargs.ptr;
|
||||||
disp_params.cArgs = cast(int) args.length;
|
disp_params.cArgs = cast(int) args.length;
|
||||||
|
|
||||||
static if (argNames.length > 0) {
|
if (argNames.length > 0) {
|
||||||
wchar*[argNames.length + 1] namesW;
|
wchar*[Args.length + 1] namesW;
|
||||||
// GetIDsOfNames wants Method name at index 0 followed by parameter names.
|
// GetIDsOfNames wants Method name at index 0 followed by parameter names.
|
||||||
// Order of passing named args is up to us, but it's standard to also put them backwards,
|
// Order of passing named args is up to us, but it's standard to also put them backwards,
|
||||||
// and we've already done so with values in `vargs`, so we continue this trend
|
// and we've already done so with values in `vargs`, so we continue this trend
|
||||||
|
@ -431,7 +431,7 @@ struct ComProperty {
|
||||||
foreach (i; 0 .. argNames.length) {
|
foreach (i; 0 .. argNames.length) {
|
||||||
namesW[i + 1] = (to!wstring(argNames[$ - 1 - i]) ~ "\0"w).dup.ptr;
|
namesW[i + 1] = (to!wstring(argNames[$ - 1 - i]) ~ "\0"w).dup.ptr;
|
||||||
}
|
}
|
||||||
DISPID[argNames.length + 1] dispIds;
|
DISPID[Args.length + 1] dispIds;
|
||||||
innerComObject_.GetIDsOfNames(
|
innerComObject_.GetIDsOfNames(
|
||||||
&GUID_NULL, namesW.ptr, namesW.length, LOCALE_SYSTEM_DEFAULT, dispIds.ptr
|
&GUID_NULL, namesW.ptr, namesW.length, LOCALE_SYSTEM_DEFAULT, dispIds.ptr
|
||||||
).ComCheck("Unknown parameter name");
|
).ComCheck("Unknown parameter name");
|
||||||
|
|
Loading…
Reference in New Issue