VB llama a Matlab
1 Con la ayuda de componentes ActiveX
Microsoft se refiere a todas las tecnologías basadas en COM como tecnología ActiveX. La automatización es la base de la mayoría de las tecnologías ActiveX y permite que los lenguajes de macros interpretados como VB controlen los objetos de automatización sin conocer los detalles de implementación de la aplicación. Matlab implementa el soporte del servicio de automatización ActiveX. Matlab se puede utilizar como un componente ActiveX del lenguaje Visual Basic en VB a través de la interfaz de automatización ActiveX. Se puede llamar a Matlab en VB a través de la interfaz de automatización ActiveX.
Las funciones del servicio de automatización Matlab ActiveX incluyen principalmente ejecutar comandos de Matlab en el espacio de trabajo de Matlab y acceder a la matriz directamente desde el espacio de trabajo. A continuación se enumeran algunos de los métodos principales admitidos por el servicio de automatización Matlab. Los tipos de parámetros y valores de retorno de estos métodos son independientes del idioma, según lo define el protocolo de automatización ActiveX. Descripción del tipo:
● BSTR Execute([in] BSTR Command);
BSTR representa un tipo de cadena ancha, que es el mismo formato de datos utilizado por VB para almacenar cadenas. Este método recibe un comando de cadena y lo ejecuta en Matlab, luego devuelve el resultado como una cadena.
● void GetFullMatrix([in] Nombre BSTR, [in] Espacio de trabajo BSTR, [in, out] SAFEARRAY(double)* pr, [in, out] SAFEARRAY(double)* pi); p> p>
Este método recupera una matriz unidimensional completa del espacio de trabajo especificado para recuperar un mxArray real o imaginario unidimensional o bidimensional completo, con sus partes real e imaginaria almacenadas en dos matrices de tipo Double respectivamente .
● void PutFullMatrix([en] Nombre BSTR, [en] Espacio de trabajo BSTR, [en] SAFEARRAY(doble) pr, [en] SAFEARRAY(doble) pi); El método coloca un mxArray en el espacio de trabajo especificado. El significado de cada parámetro y el método de llamada son similares al método GetFullMatrix.
El código de muestra es el siguiente:
Dim Matlab As Object 'Objeto de declaración
Dim MReal1(5, 5) As Double
'Declaración Matriz doble con parte real
Dim MImag() As Double
'Declara una matriz de tipo Doble que contiene la parte imaginaria
Set Matlab=CreateObject ("Matlab.Application ") 'Inicializar el objeto
Matlab.Execute("a=hilb(5)")
'Ejecutar el comando de Matlab
Llame a Matlab.GetFullMatrix("a", "base",MReal1,MImag)
'Almacene los resultados en matrices reales e imaginarias respectivamente
II, utilizando tecnología DDE
DDE (Intercambio dinámico de datos) permite que las aplicaciones de Microsoft Windows se comuniquen entre sí mediante el intercambio de datos. Las aplicaciones se comunican entre sí estableciendo una sesión DDE. La aplicación que inicializa la sesión se llama cliente y la aplicación que responde al cliente se llama servidor.
La Figura 1 describe el mecanismo de comunicación entre Matlab y otras aplicaciones cuando actúa como servidor.
Figura 1 Mecanismo de comunicación de la aplicación con la ayuda de DDE
En este caso, la función DDE puede ser proporcionada por la aplicación o la biblioteca del motor Matlab.
Al inicializar una sesión, la aplicación cliente debe especificar los dos parámetros nombre de servicio (el nombre de la aplicación del servidor) y tema (el tema de la sesión).
El siguiente ejemplo ilustra todo el proceso de establecimiento y finalización de una sesión DDE entre VB y Matlab:
Descripción: TextInput es el cuadro de texto de entrada y TextOutput es el cuadro de texto de salida. Después de ingresar un comando de Matlab en TextInput, Matlab ejecutará el comando en segundo plano y devolverá los resultados a TextOutput para su visualización.
Sub TextInput_KeyPress(KeyAscii As Integer)
Si KeyAscii = vbKeyReturn entonces
'Inicializar la sesión DDE entre TextInput y Matlab'
TextInput.LinkMode = vbLinkNone
TextInput.LinkTopic = "MATLAB"
TextInput.LinkTopic = "MATLAB"
TextInput.LinkTopic = "MATLABLinkTopic="MATLAB| Engine"
TextOutput.LinkItem="EngStringResult"
TextOutput.LinkMode=vbLinkManual
'Devuelve y muestra el resultado de la ejecución
TextOutput LinkMode=vbLinkManual
'Devuelve y muestra los resultados de la ejecución
TextOutput.LinkMode=vbLinkManual
.