作者:旧日旧面 | 来源:互联网 | 2023-10-11 10:52
matlab的组件时什么?-------------自定义的com系统。只要明白com的原理,自己作出一个针对某一个方向的类com不是很难com的复杂性,大部分来源于他的几种分
matlab 的组件时什么?
-------------
自定义的com系统。
只要明白com的原理,自己作出一个针对某一个方向的类com不是很难
com的复杂性,大部分来源于 他的几种分离思想的实现,和他的通用型目的。
把matlab脚本编译成一个可以动态连接的东西,
这个东西,可以通过某种方式返回一个对象指针
这些对象实现某种约定。
思考到这里,发觉matlab根本就不会把matlab脚本编译成通用的我们说得com,
要知道com都是要占注册表的。matlab那么大的库,要是都注册了,系统要是不完蛋,就
出奇了。
要是我是matlab的设计者。我回这么做:
首先定义一些dll中必须实现的输出方法。如
GetObj();
这个函数返回一个特定对象的指针。而这个对象是实现了某个接口的。
原型类似 DllExport void* GetObj();
然后在matlab的核心程序中,当用户键入一个命令后,
第一大步,找
1 解析得到命令名和参数列表
2 检索核心里实现的方法,如关于矩阵处理的一些基本运算,(这些运算使用频率高,
需要很高的效率,所以matlab放到了核心里。)
3 如果2检索不到,到库目录下寻找(包括com和一些matlab脚本文件)
4 如果3找不到,到当前工作目录下寻找com或脚本
以上四部是shell的共性。想想dos shell,linux shell,是不是很相似,内部命令,外部命令。
第二大步,用
1 如果是脚本,解释执行。
2 如果是com,这是我们讨论的重点。
3 loadlibrary
4 getobject,并用接口指针,指向他。
5 使用接口指针,传递参数,调用方法。完成特定功能。
第三步,输出
格式化返回值,并输出
这样,功能matlab的骨头就建起来了。
相似的例子:
研究插件时,我看过的RealPlugin
看java源码时看到的 JVM 实现
使用了相似的技术
mediaplayer 插件和用户编程人员接口 老实巴交的使用了标准的com。(自家产的东西,自家用)
realplayer 只是在最外层,用户接口这一层用到了标准com。plugin是自定义的。
兄弟,是在参加数学建模大赛嘛?
令人怀念啊。