Vs.net 2003调用Matlab7编译的COM组件的问题与讨论
2006-05-12 14:33
531 查看
发布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组件发布中的问题。
另我从Mathworks公司的官方网站上了解到Matlab7.0以后的版本(MATLAB 7.2 (2006a) )增加了对.net环境的支持,它专门有一个工具箱叫Matlab Builder for .net,可将Matlab函数文件编译成源代码为C#的COM组件,可非常方便的在.net环境中调用组件,希望它不会出现这些问题。还有一个特点就是它增强了在Matlab与其他开发环境之间的数据交换问题。
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组件发布中的问题。
另我从Mathworks公司的官方网站上了解到Matlab7.0以后的版本(MATLAB 7.2 (2006a) )增加了对.net环境的支持,它专门有一个工具箱叫Matlab Builder for .net,可将Matlab函数文件编译成源代码为C#的COM组件,可非常方便的在.net环境中调用组件,希望它不会出现这些问题。还有一个特点就是它增强了在Matlab与其他开发环境之间的数据交换问题。
相关文章推荐
- VS.NET 2003编译DirectShow的问题
- 安装VS.NET 2003 和 SQL Server 2000 的问题及解决方法
- 用VS.NET 2003开发和调用Web Service实例(转帖)
- vs.net 2003安装的相关问题
- 最近遇到VS.Net的两个问题--无法调试,未加载符号和后台代码无法调用控件
- 对调用了TypeMock.net的代码进行调试遇到的怪问题--在vs.net中启动resharper自带的unit test的过程和方式是什么样的?
- 解决VS.NET 2003不能建工程的问题
- 用VS.NET 2003开发和调用Web Service实例
- 彻底解决 CrystalReports 登录失败问题 (vs.net 2003)
- 在VS.NET 2003中建立项目时遇到的两个问题及解决方法
- C/C++/C#问题记录(一)VS2012编译调用dll项目找不到lib的workaround
- 在 Microsoft Virtual PC 2004 中运行 vs.net 2003 的配置问题
- 很喜欢VS.NET 2003对条件编译的代码提示
- 在VS.NET 2003中建立项目时遇到的两个问题及解决方法 (转贴)
- VS2012 编译libmseed源码生成dll文件并调用中遇到的一些问题
- 在 Microsoft Virtual PC 2004 中运行 vs.net 2003 的配置问题
- 如何解决VS.NET中应用程序编译完后改变引用位置的问题
- 声讨vs.net,讨论用户控件,编码等问题
- 在vs.net 2003中编译ns2(2):编译tk
- 在vs.net 2003中编译ns2(3):编译otcl