1 COM概述
(1)组建对象模型是一种软件架构,它允许应用软件可以由不同软件制造商的组件产品来构建。
(2)COM技术解决的一个基本问题就是如何设计一个系统,使得不同软件开发商在不同时间和地点开发的代码能够协同操作以及共享二进制代码。
(3)COM有别于C++语言中的对象。C++对象是对于实际问题的一种抽象,是软件开发的一种手段。而COM提供了一种可以共享二进制代码的工业标准。
(4)COM给软件开发人员提供了一种共享二进制代码的方法,这种共享不局限于某一种编程语言,COM的代码共享有别于软件开发源代码的共享与重用,因为源代码得共享只能局限某编程语言。
2 Matlab的COM编译器
2.1 Matlab编译器简介
使用Matlab编译器将Matlab应用程序转换成方便使用的COM对象,在其他语言编写的程序中使用这些组件对象。
COM编译器工作原理:利用Matlab编译器把Matlab程序转换成C/C++程序,同时产生与COM有关的包装代码,然后调用外部编译器来产生COM对象。
2.2 运行Matlab COM编译器的必要条件
Matlab的COM编译器是利用M编译器来把M程序转换成C/C++源程序的,然后调用外部C++编译器来编译,生成COM对象,Matlab的COM编译器对运行环境要求几乎和M编译器所要求的一样。M的COM编译器所能转换的M函数完全由M编译器决定。但是并不是所有M函数都可以被转换成C/C++代码,所以调用这些函数的M程序也不能被编译成COM对象。
M的COM 编译器也需要一个外部编译器来产生最终的组件对象。目前M的COM编译器只支持微软公司的Visual C++6.0(Visual studio 6)、7.0(Visual studio.Net 2002)和7.1(Visual studio.Net 2003)。所以在使用Matlab的COM编译器创建COM组建前必须确保已经安装了某个版本的Visual C++,并且在M环境中使用mbuild命令成功设置了该编译器。
3 Matlab COM编译器创建COM组件
comtool是一个图形界面的M工具
使用comtool编译COM组件的过程包括如下四步:
(1)创建一个new工程,或打开一个已经存在的工程
(2)给工程加入需要的M程序或MEX文件
(3)编译工程
(4)打包和发布产生的COM组件
编译结束后产生的COM组件只能在当前计算机上使用,为了能把它发布到其他计算机上使用,还需要其他一些支持文件。另外COM组件不同于普通的DLL文件,COM组件必须注册后才能在计算机上使用。
选择component-->Package component命令,comtool将会把发布该组件所需要的所有文件打包到一个和工程同名的可执行文件中,在这里可选择是否在打包文件中包含MCR,M7.x产生的COM组件必须运行在MCR环境。如果目标计算机上没有安装MCR ,则选择“包含MCR”这样在打包文件中会包含MCR的安装文件。
假设打包文件名为testmyadd.exe,如下所示:
testmyadd.exe文件中包含4个文件:
_install.bat
testmyadd_1_0.dll
testmyadd.ctf
MCR Installer.exe
将testmyadd.exe复制到需要发布的computer上后运行。
结果将会把这4个文件解压,并执行_install.bat(这是个DOS批处理文件)查看他的内容可以发现:_install.bat将会运行MCR Installer.exe来安装MCR,并且在系统中注册组件testmyadd_1._0.dll
注意:可以在VC++6.0中Tools-->,OLE/COM Object viewer中查看.dll接口的定义,产生IDL文件。
matlab与C#混合编程之最初体验——生成COM组件以供程序来调用。
相关文章
- C#程序调用COM组件,编译好后放在其它电脑上无法运行。怎么办?
- vue 子父组件之间的通信,及在调用组件的地方
- 编写一个简单的COM组件
- 【大型软件开发】浅谈大型Qt软件开发(四)动态链接库的宏冲突问题、COM组件开发的常见问题
- Vue父组件调用子组件的方法
- vue 父组件调用子组件的方法
- 基于A星和dijkstra算法的障碍物规避matlab仿真,可以设置行列数,随机产生障碍物
- 【大型软件开发】浅谈大型Qt软件开发(二)面向未来开发——来自未来的技术:COM组件。我如何做到让我们的教学模块像插件一样即插即用,以及为什么这么做。
- Vue 父组件调用子组件的方法
- 用.native修饰器来对外部组件进行构造器内部方法的调用以及用原生js获取构造器里的方法