¿Cómo invoco funciones que reciben valores de punto flotante usando IDispatch.Invoke?
Tengo problemas para llamar a una función que tiene un argumento de punto flotante y un resultado de punto flotante, usandoIDispatch.Invoke
.
Aquí hay una reproducción mínima:
#include <atlbase.h>
#include <comutil.h>
int main(int argc, char* argv[])
{
CoInitialize(NULL);
CComPtr<IDispatch> wordapp;
if (SUCCEEDED(wordapp.CoCreateInstance(L"Word.Application", NULL, CLSCTX_LOCAL_SERVER)))
{
CComVariant result;
CComVariant centimeters((float)2.0);
CComVariant retval = wordapp.Invoke1(L"CentimetersToPoints", ¢imeters, &result);
}
return 0;
}
Estoy usando el ATLCComPtr
para hacer las cosas más limpias. Pero es una envoltura muy suelta alrededorIDispatch.Invoke
.
Cuando ejecuto esto, la llamada aInvoke1
falla y devuelveE_FAIL
.
Sospecho que el problema está relacionado con el uso de argumentos de punto flotante y / o valor de retorno. Si llamo a una función que no usa tales valores, la invocación tiene éxito:
CComVariant retval = wordapp.Invoke0(L"ProductCode", &result);
Observo que si llamo a la función desde VBS, o desde PowerShell, tiene éxito. Supongo que los dos usan el límite tardíoIDispatch
y eso indicaría que lo que estoy intentando es al menos posible.
Entonces, ¿cómo puedo llamar a esta función usandoIDispatch
?