Main Content

Controle los datos COM enMATLAB

Pasar datos a objetos COM

Cuando se utiliza un objeto COM en un comando, los tipos que se pasan en la llamada se convierten en tipos nativos del objeto COM. realiza esta conversión en cada argumento que se pasa.MATLAB®MATLABMATLAB En esta sección se describe la conversión.

convierte los argumentos en tipos que mejor representan los datos al objeto COM.MATLABMATLAB En la tabla siguiente se muestran todos los tipos base para los argumentos pasados y los tipos COM definidos para los argumentos de entrada.MATLAB Cada fila muestra un tipo seguido de las coincidencias posibles del argumento COM.MATLAB Para obtener una descripción de los tipos de variantes COM, vea la tabla en.Manejo de datos de objetos COM

ArgumentoMATLABEl tipo COM más cercanoTipos permitidos
ManejarVT_DISPATCH
VT_UNKNOWN
VT_DISPATCH
VT_UNKNOWN
Vector de caracteres VT_BSTRVT_LPWSTR
VT_LPSTR
VT_BSTR
VT_FILETIME
VT_ERROR
VT_DECIMAL
VT_CLSID
VT_DATE
int16 VT_I2VT_I2
uint16VT_UI2VT_UI2
int32VT_I4VT_I4
VT_INT
uint32VT_UI4VT_UI4
VT_UINT
int64VT_I8VT_I8
uint64VT_UI8VT_UI8
singleVT_R4VT_R4
double VT_R8VT_R8
VT_CY
logicalVT_BOOL VT_BOOL
Char VT_I1VT_I1
VT_UI1

Variant Data

es cualquier tipo de datos excepto una estructura o una matriz dispersa.variant (Para obtener más información, consulte.)Fundamental MATLAB Classes

Cuando se utiliza como un argumento de entrada, trata y (puntero) de la misma manera.MATLABvariantvariant

Si se pasa una matriz vacía () de tipo, se crea un (puntero) establecido en.[]doubleMATLABvariantVT_EMPTY No se admite el paso de una matriz vacía de cualquier otro tipo numérico.

ArgumentoMATLABEl tipo COM más cercanoTipos permitidos
variant VT_VARIANTVT_VARIANT
VT_USERDEFINED
VT_ARRAY
punterovariantVT_VARIANT|VT_VARIANTVT_BYREF

SAFEARRAY Data

Cuando un método COM identifica un o (puntero), el equivalente es una matriz.SAFEARRAYSAFEARRAYMATLAB

ArgumentoMATLABEl tipo COM más cercanoTipos permitidos
SAFEARRAYVT_SAFEARRAYVT_SAFEARRAY
punteroSAFEARRAY VT_SAFEARRAY|VT_SAFEARRAYVT_BYREF

Manejo de datos de objetos COM

Los datos devueltos desde un objeto COM son a menudo incompatibles con los tipos.MATLAB Cuando esto ocurre, convierte el valor devuelto a un tipo de datos nativo del idioma.MATLABMATLAB En esta sección se describe la conversión realizada en los distintos tipos que se pueden devolver desde objetos COM.

En la tabla siguiente se muestra cómo convierte los datos de un objeto COM en variables.MATLABMATLAB

Tipo de variante COM

Descripción

RepresentaciónMATLAB

VT_DISPATCH

IDispatch *

Manejar
VT_LPWSTR
VT_LPSTR
VT_BSTR
VT_FILETIME
VT_ERROR
VT_DECIMAL
VT_CLSID
VT_DATE

cadena terminada de cadena terminada de serie OLE automatización de cadena de 16 bytes de punto fijo fecha de ID de clasenull
null

FILETIME
SCODE


Vector de caracteres
VT_INT
VT_UINT
VT_I2
VT_UI2
VT_I4
VT_UI4
VT_R4
VT_R8
VT_CY

2 bytes de 4 bytes y 4 bytes de moneda de 8 bytessigned machine int
unsigned machine int
signed int
unsigned short
signed int
unsigned long
real
real

double
VT_I8

signed int64

int64
VT_UI8

unsigned int64

uint64
VT_BOOL  logical
VT_I1
VT_UI1
signed char
unsigned char
Char
VT_VARIANT
VT_USERDEFINED
VT_ARRAY

tipo definido por el usuarioVARIANT *

SAFEARRAY*

variant
|VT_VARIANTVT_BYREF

para uso localVARIANT *
void*

punterovariant
VT_SAFEARRAY

utilizar enVT_ARRAYVARIANT

SAFEARRAY
|VT_SAFEARRAYVT_BYREF punteroSAFEARRAY

Tipos no admitidos

no admite los siguientes tipos de interfaz COM y muestra la advertencia.MATLABActiveX - unsupported VARIANT type encountered

  • Estructura

  • La matriz dispersa

  • Multidimensional s (mayor que dos dimensiones)SAFEARRAY

  • Las propiedades de solo escritura

Pasar datos a objetosMATLABActiveX

Las tablas también muestran la asignación de tipos a tipos COM que debe usar para pasar datos de unMATLABMATLAB Microsoft®ActiveX® Objeto. Para todos los demás tipos, muestra la advertencia.MATLABActiveX - invalid argument type or value

Pasando SAFEARRAY a objeto COMMATLAB

El tipo de datos es una forma estándar de pasar matrices entre objetos COM.SAFEARRAY En esta sección se explica cómo se pasan los datos a un objeto COM.MATLABSAFEARRAY

Comportamiento predeterminado en softwareMATLAB

representa una-por-matriz como una bidimensional, donde la primera dimensión tiene elementos y la segunda dimensión tiene elementos. pasa el valor por.MATLABmnSAFEARRAYmnMATLABSAFEARRAY

Ejemplos

En los ejemplos siguientes se usa un objeto COM que espera un parámetro de entrada.SAFEARRAY

Cuando pasa a-por-Array:MATLAB13

B = [2 3 4] B =      2     3     4 

el objeto lee:

No. of dimensions: 2 Dim: 1,   No. of elements: 1  Dim: 2,   No. of elements: 3      Elements:      2.0      3.0      4.0 

Cuando pasa a-por-Array:MATLAB31

C = [1;2;3] C =      1      2      3 

el objeto lee:

No. of dimensions: 2 Dim: 1,   No. of elements: 3  Dim: 2,   No. of elements: 1  Elements:      1.0      2.0      3.0 

Cuando pasa a-por-Array:MATLAB24

D = [2 3 4 5;5 6 7 8]  D =      2     3     4     5      5     6     7     8 

el objeto lee:

No. of dimensions: 2 Dim: 1,   No. of elements: 2  Dim: 2,   No. of elements: 4  Elements:      2.0      3.0      4.0      5.0      5.0      6.0      7.0      8.0 

Cómo pasar un SAFEARRAY de una sola dimensión

Para obtener información, consulte¿Cómo puedo pasar argumentos a un servidor ActiveX de MATLAB 7,0 (R14) como matrices unidimensionales?

Pasando SAFEARRAY por referencia

Para obtener información, consulte¿Cómo puedo pasar argumentos por referencia a un servidor ActiveX de MATLAB 7,0 (R14)?

Lectura de SAFEARRAY de objetos COM en aplicacionesMATLAB

En esta sección se explica cómo se leen los datos de un objeto COM.MATLABSAFEARRAY

Lee una unidimensional con elementos de un objeto COM como una matriz.MATLABSAFEARRAYn1n Por ejemplo, mediante los métodos del control de ejemplo, escriba:MATLABmwsamp

h=actxcontrol('mwsamp.mwsampctrl.1') a = GetI4Vector(h) 

Muestra:MATLAB

a =            1           2           3 

Lee una bidimensional con elementos como a-por-Matrix.MATLABSAFEARRAYn2n Por ejemplo:

a = GetR8Array(h)

Muestra:MATLAB

a =      1     2     3      4     5     6 

Lee un tridimensional con dos elementos como un array por celda.MATLABSAFEARRAY222 Por ejemplo:

a = GetBSTRArray(h)

Muestra:MATLAB

a(:,:,1) =       '1 1 1'    '1 2 1'     '2 1 1'    '2 2 1'  a(:,:,2) =       '1 1 2'    '1 2 2'     '2 1 2'    '2 2 2' 

Mostrar sintaxis para objetos COMMATLAB

Para determinar los tipos que se usarán al pasar argumentos a objetos COM, utilice las funciones o.MATLABinvokemethodsview Estas funciones lista todos los métodos encontrados en un objeto, junto con una especificación de los tipos requeridos para cada argumento.

Considere un servidor llamado, que tiene un único método con la siguiente sintaxis:MyAppTestMeth1

HRESULT TestMeth1 ([out, retval] double* dret);

Este método no tiene ningún argumento de entrada y devuelve una variable de tipo.double A continuación se muestra la sintaxis para llamar al método.pseudo-códigoMATLAB

h = actxserver('MyApp'); invoke(h) 

Muestra:MATLAB

ans =     TestMeth1 = double TestMeth1 (handle) 

La firma es:TestMeth1

double TestMeth1(handle)

requiere que use un identificador de objeto como argumento de entrada para cada método, además de los argumentos de entrada requeridos por el propio método.MATLAB

Utilice uno de los siguientes comandos para crear la variable, que es de tipo.pseudo-códigovardouble

var = h.TestMeth1;

O:

var = TestMeth1(h);

Aunque la sintaxis siguiente es correcta, se desaconseja su uso:

var = invoke(h,'TestMeth1');

Ahora considere el servidor llamado con los siguientes métodos:MyApp1

HRESULT TestMeth1 ([out, retval] double* dret); HRESULT TestMeth2 ([in] double* d, [out, retval] double* dret); HRESULT TestMeth3 ([out] BSTR* sout,                    [in, out] double* dinout,                    [in, out] BSTR* sinout,                    [in] short sh,                    [out] long* ln,                    [in, out] float* b1,                    [out, retval] double* dret); 

Utilizando la función, muestra la lista de métodos:invokeMATLAB

ans =     TestMeth1 = double TestMeth1 (handle)    TestMeth2 = double TestMeth2 (handle, double)    TestMeth3 = [double, string, double, string, int32, single] ...                TestMeth3(handle, double, string, int16, single) 

requiere un argumento de entrada de tipo y devuelve una variable de tipo.TestMeth2ddoubledretdouble Algunos ejemplos de llamadas son:pseudo-códigoTestMeth2

var = h.TestMeth2(5);

O:

var = TestMeth2(h, 5);

requiere varios argumentos de entrada, como se indica dentro de los paréntesis en el lado derecho del signo igual, y devuelve varios argumentos de salida, como se indica dentro de los corchetes en el lado izquierdo del signo igual.TestMeth3

[double, string, double, string, int32, single]  %output arguments TestMeth3(handle, double, string, int16, single) %input arguments 

El primer argumento de entrada es el requerido, seguido de cuatro argumentos de entrada.Manejar

TestMeth3(handle, in1, in2, in3, in4)

El primer argumento de salida es el valor devuelto, seguido de cinco argumentos de salida.retval

[retval, out1, out2, out3, out4, out5]

Así es como los argumentos se asignan a un comando:MATLAB

[dret, sout, dinout, sinout, ln, b1] = TestMeth3(handle, ...                                        dinout, sinout, sh, b1) 

donde está, es, es y es tanto una entrada como un argumento de salida, es (argumento de entrada y salida), is, is (argumento de entrada y salida), es el identificador del objeto y es.dretdoublesoutstringdinoutdoublesinoutstringlnint32b1singleManejarshint16