Vs.net 2003调用Matlab7编译的COM组件的问题与讨论
发布COM组件到目标机器,运行下面的简单程序,用VS.net2003调用Matlab7.0编译的COM组件,实现图片的处理和加法功能:
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:
原因:COM组件发布到目标机器不成功,.dll注册失败。
问题2:当注册成功COM组件后,当运行程序,第一次调用COM组件实现某个功能(如加法运算)时,也还会碰到如下问题:
第二次调用COM组件实现某个功能(如加法运算)时能成功。什么原因????
注意,这个问题不会在本机(编译COM组件的机器)上出现,因此高度怀疑还是COM组件发布中的问题。