Vs.net 2003调用Matlab7编译的COM组件的问题与讨论

发布COM组件到目标机器,运行下面的简单程序,用VS.net2003调用Matlab7.0编译的COM组件,实现图片的处理和加法功能:

Vs.net 2003调用Matlab7编译的COM组件的问题与讨论_第1张图片 

COM的发布:
-----------------------------------------------------

1.如果目标机器没有装MATLAB Component Runtime (MCR) (即目标机器上没有装MATLAB)

把源机器\..\matlab\toolbox\compiler\deploy\win32\MCRInstaller.exe拷贝到目标机器上安装并将该安装的以下路径加入到系统变量PATH 中\..\MATLAB Component Runtime\v70\bin\win32 

注:a.或者可以直接在编译时将MCR添加到COM组件包中,这样导致的COM组件的.exe文件较大,这样运行.exe文件安装
b.一般情况下,安装过程中会自动将路径添加到系统变量PATH中
 

2.将源机器下的\..\matlab\bin\win32\mwcomutil.dll拷贝到 \..\MATLAB Component Runtime\v70\bin\win32下并在此路径下注册该DLL(方法是:在DOS中该路径下输入 regsvr32 mwcomutil.dll或在该此文件夹中创建一个.bat文件,其中的命令是regsvr32 mwcomutil.dll保存后直接点击该.bat文件即可)  

3 以上是在目标机器上第一次发布COM时必须的,以后再发布COM就不用进行前两步在目标机器上创建一个文件夹来放置COM,如 ..\myCOM将源机器上将发布的COM组件文件夹中distrib文件夹下的_mcr文件夹的所有文件及.EXE (代表所要发布的COM组件的名字)copy到\..\myCOM 在该目录下执行.EXE

注:a.此处似乎存在问题,我碰到的实际情况是,如果按这一步所说的操作,则会出现下面问题1所出现的问题(如下)。
      b.如果不进行_mcr文件夹的拷贝,只COPY .exe文件,然后运行.exe文件,我发现第一次运行程序,调用COM组件时,将在当前目录自动生成*_mcr文件(*代表你的COM组件名),则不会出现上面的问题。关于个中原因,希望有大牛提供答案。

至此COM发布成功

运行程序调用COM组件所碰到的问题:

问题1:
Vs.net 2003调用Matlab7编译的COM组件的问题与讨论_第2张图片

 

原因:COM组件发布到目标机器不成功,.dll注册失败。

问题2:当注册成功COM组件后,当运行程序,第一次调用COM组件实现某个功能(如加法运算)时,也还会碰到如下问题:
Vs.net 2003调用Matlab7编译的COM组件的问题与讨论_第3张图片
第二次调用COM组件实现某个功能(如加法运算)时能成功。什么原因????

注意,这个问题不会在本机(编译COM组件的机器)上出现,因此高度怀疑还是COM组件发布中的问题。

  另我从Mathworks公司的官方网站上了解到Matlab7.0以后的版本(MATLAB 7.2 (2006a) )增加了对.net环境的支持,它专门有一个工具箱叫Matlab Builder for .net,可将Matlab函数文件编译成源代码为C#的COM组件,可非常方便的在.net环境中调用组件,希望它不会出现这些问题。还有一个特点就是它增强了在Matlab与其他开发环境之间的数据交换问题。

你可能感兴趣的:(Vs.net 2003调用Matlab7编译的COM组件的问题与讨论)