Bingo !!! Works fine. Many many thanks for your help Thomas.
Code: Select all
Outputs2 = ApplicationExcell:invokeMethodWithOutput2("Range",[comdomains::in(comDomains::string("B6:E7"))]),
stdio::writef("%\n", Outputs2),
comDomains::iDispatch(IFind) == list::nth(0,Outputs2),
CellSel = comDispInterface::new(IFind),
CellSel:invokeMethod("Select",[])
in comDispInterface.pro :
Code: Select all
clauses
invokeMethodWithOutput2(MethodName, Params2) = OutList :-
Params = removeOptionalTail(Params2),
NParams = list::length(Params),
Size = NParams*sizeOfDomain(comDomains::comVariant),
ParamsArray = allocOrNull(Size),
AfterLast = memory::pointerAdd(ParamsArray, Size),
reverseFillArray_dispParameter(AfterLast, Params),
ComVariant = variant::allocateComVariant(),
DispParams = comDomains::comDispParams(ParamsArray, null, convert(unsigned, NParams), 0),
invoke(MethodName, com_native::dispatch_propertyGet, DispParams, ComVariant),
Variant = variant::toVariantAndClear(ComVariant, comMemory::release()),
if comDomains::empty() = Variant then Tail = [] else Tail = [Variant] end if,
OutList = getReverseOutputParams(AfterLast, Params, Tail),
dispose(uncheckedConvert(comDomains::comVariant, ParamsArray), NParams).
in comDispInterfaceExport.pro :
Code: Select all
clauses
invokeMethodWithOutput2(MethodName, ParamList) = OutList :-
mkArray_dispParameter(ParamList, ParamArray, Count),
DispParams = comDomains::comDispParams(uncheckedConvert(pointer, ParamArray), ::null, Count, 0),
ComVariant = variant::allocateComVariant(),
try
invoke(MethodName, com_native::dispatch_method, DispParams, ComVariant),
Variant = variant::toVariantAndClear(ComVariant, comMemory::keep()), % better to release it in the finally section
OutList = getOutputParams(ParamArray, ParamList, [Variant])
finally
comVariant_clear(ParamArray, Count),
comMemory::taskMemFree(ComVariant)
end try.
in comDispInterface.i :
Code: Select all
predicates
invokeMethodWithOutput2 : (string MethodName, comDomains::dispParameter* Params) -> comDomains::variant* OutValues.
...and this code works fine too :
Code: Select all
Outputs2 = ApplicationExcell:invokeMethodWithOutput2("Cells",[comdomains::in(comDomains::integer(2)),comdomains::in(comDomains::integer(2))]),
