Mantengo un programa que se puede automatizar a través de COM. En general, los clientes usan VBS para hacer sus scripts, pero tenemos un par de clientes que usan Compatibilidad con ActiveX de Matlab y tienen problemas con llamando a métodos de objetos COM con un parámetro NULL.¿Cuál es el equivalente Matlab de NULL, cuando llama a métodos COM/ActiveX?
Se han preguntado cómo lo hacen en Matlab - y he estado recorriendo Mathworks' COM/ActiveX documentation por un día o así que ahora y no pueden entenderlo.
Su código de ejemplo podría ser algo como esto:
function do_something()
OurAppInstance = actxserver('Foo.Application');
OurAppInstance.Method('Hello', NULL)
end
donde NULL
es donde en otro idioma, nos escribimos NULL
o nil
o Nothing
, o, por supuesto, pase en un objeto. El problema es que esto es opcional (y estos se implementan como parámetros opcionales en la mayoría, pero no todos, casos) - estos métodos esperan obtener NULL con bastante frecuencia.
Me dicen que han intentado []
(que a partir de mi lectura parecía el más probable), así como ''
, Nothing
, 'Nothing'
, None
, Null
y 0
. No tengo idea de cuántas de esas son palabras clave válidas de Matlab, ciertamente ninguna funciona en este caso.
¿Alguien puede ayudar? ¿Cuál es la sintaxis de Matlab para un puntero/objeto nulo para usar como un parámetro de método COM?
Actualización: Gracias por todas las respuestas hasta el momento! Desafortunadamente, ninguna de las respuestas parece funcionar, ni siquiera libpointer
. El error es la misma en todos los casos:
Error: Type mismatch, argument 2
Este parámetro en la biblioteca de tipo COM se describe en RIDL como:
HRESULT _stdcall OurMethod([in] BSTR strParamOne, [in, optional] OurCoClass* oParamTwo, [out, retval] VARIANT_BOOL* bResult);
El coclase en cuestión implementa una única interfaz que desciende de IDispatch.
Gracias Peter. El cliente en cuestión dice que ha intentado esto y que no funcionó. He actualizado la pregunta con más información sobre la información de error y la firma del método específico. –