Matlab混合编程之COM组件(C#篇)

Matlab混合编程之COM组件(C#篇) (2014-04-02 18:20:48)

转载

标签:

激动人心

代码

不含

如图

任何

分类: 软件使用

另一种混合编程方式——COM组件,利用m文件生成dll再由C#调用。跟.NET组件很相似,但有些区别。COM组件较之引擎的优点是可移植型较好,目标机不需要安装Matlab,只需要安装MCRinstaller.exe及dll的注册,缺点是配置较为复杂,受各种版本的影响

配置环境:vs2013(64位)+Matlab2013a(64位)+win8.1(64位)

Matlab安装路径:C:\Program Files\MATLAB\R2013a为例

1.定义Matlab文件,myplus.m

function [s]  = myplus( n )

% calculate the sum of 1..n

s = 0;

for i = 1:n

    s = s + i;

end

2.Matlab编译器设置

在command window中配置分别配置>>mbuild –setup和>>mex –setup.

编译器均选择 VS2013

问题:matlab在关联编译器的时候,会出现找不到编译器的问题

原因:matlab要找windows sdk的mt.exe,找不到报错的.因为vs2013在安装时,windows sdk的mt.exe位置变了,而matlab还是按照老的路径找,肯定找不到(原来在windows sdks下面,现在在windows kits下面).

解决:网上找到相应文件,将mbuildopts和mexopts两个文件夹复制到 (matlabroot)\bin\win64 下,(matlabroot)是matlab的安装目录

在command window中>> deploytool。先创建project,选择Generic COM Component类型;然后把myplus.m文件添加到project里面,然后点上面菜单条上的build the project

Matlab混合编程之COM组件(C#篇)
 

Matlab混合编程之COM组件(C#篇)


 

3. 环境安装及dll注册

需要安装MCRinstaller.exe(本机则不需要),它所在的位置是:C:\Program Files\MATLAB\R2013a\toolbox\compiler\deploy\win64;

在路径C:\Program Files\MATLAB\R2013a\bin\win64里,对mwcomutil.dll进行注册(这个dll是matlab下作的任何com组件都要用到的dll),下面我们在其他编译器下调用时就可以用了。

问题:提示错误为注册dll模块的原因(Error: DllRegisterServer in E:\Matlab2010b\bin\test\src\test_1_0.dll failed)

解决:点“开始”->“Windows系统”->“命令提示符”右键“以管理员身份运行”,在cmd中输入regsvr32 mwcomutil.dll 。这样应该就可以了。

4. dll引用

从HelloCOM\distrib里的HelloCOM.dll复制到debug目录下。然后添加引用,浏览debug目录。如果不在本地则需要对COM组件进行注册,regsvr32 HelloCOM.dll

5.在c#中简单做一个windowsapplication

在按钮事件里的代码是:

private void button1_Click(object sender EventArgs e)

        {

            HelloCOM.Class1 myhello = new HelloCOM.Class1();

            object result = new object();

            myhello.myplus(1, ref result, 3);

            label1.Text = result.ToString();

        }

问题;C#在调用dll初始化matlab生成的类时,总是提示:typeInitialization exception类型初始化设定异常,网上找了好久,试了个各种解决方法

解决:原来是在build dll时,选择的.m文件的所在路径不能包含中文/空格,我把.m文件直接移到了根目录下的某个不含空格和中文的文件夹下,然后把在这个文件夹下的.m文件拖到myTest.prj中,build,VS中重新引用生成的新的dll,发现程序正确。

在整个过程中,运行程序还是会出现问题,Matlab不能工作,如图:

Matlab混合编程之COM组件(C#篇)


 

原因:.NET版本的问题,及调试的问题

解决:将.NET设置成4.0及其以下,

Matlab混合编程之COM组件(C#篇)
 

同时,将调试中的启用Visual Studio 承载进程取消掉,如下图

Matlab混合编程之COM组件(C#篇)


 

最后的最后,终于有结果了!激动人心啊~

Matlab混合编程之COM组件(C#篇)

猜你喜欢

转载自blog.csdn.net/weixin_40694114/article/details/81200214
今日推荐