如何在c#中调用matlab模块
昨天樊小弟bg大哥夜宵,托大哥我帮他解决在网页中调用matlab模块的问题,考虑到我毕业设计也是用matlab和c#,今天闲来无事,查阅了下资料,终于找到解决方法。写点东西以防以后找不到。
1.在matlab中编写.m文件。
例如:创建add.m
function [c]=add(a,b)
c=a+b;
end
2.在matlab中生成com组件
a)安装c/c++编译器mbuild -setup(可能要先运行mex -setup)
Select a compiler:
[1] Lcc-win32 C 2.4.1 in D:\PROGRA~1\MATLAB\R2008b\sys\lcc
[2] Microsoft Visual C++ 2008 in D:\Program Files\Microsoft Visual Studio 9.0
[1]是matlab自带的编译器,ms不够强悍,我是机子上装vs2008选[2],具体根据自己情况选择。
装好了以后就不用再装了。
b)生成com组件
matlab命令行窗口中运行deploytool,启动deployment tool
新建project->选择matlab builder NE->选择generic com component->输入project名称"test",确定->add file->build the project 开始生成com组件,生成后会自动regsvr32 test_1_0.dll
注:matlab 2007以前的版本使用comtool来生成com组件,之后的版本都没有comtool都是用deploytool.
3.在vs2008中调用com组件
a)第一次使用时要注册 mwcomutil.dll。
在“运行”中输入regsvr32 matlab安装路径\bin\win32\mwcomutil.dll。
b)创建c#工程,在reference中添加生成的com组件 test_1_0.dll。
c)添加需要调用的地方调用代码
test.testClass ts = new test.testClass();
object c=0, a=1, b=1;//调用前需要先初始化包括输出在内的所有参数
ts.add(1, ref c, a, b); //c前需要添加ref,1表示的应该是输出参数的个数(个人猜测)
注:参数的类型必须是object,matlab函数function [c]=add(a,b)生成的对应的c#函数格式为void add(int i,ref object c,object a,object b);
昨天樊小弟bg大哥夜宵,托大哥我帮他解决在网页中调用matlab模块的问题,考虑到我毕业设计也是用matlab和c#,今天闲来无事,查阅了下资料,终于找到解决方法。写点东西以防以后找不到。
1.在matlab中编写.m文件。
例如:创建add.m
function [c]=add(a,b)
c=a+b;
end
2.在matlab中生成com组件
a)安装c/c++编译器mbuild -setup(可能要先运行mex -setup)
Select a compiler:
[1] Lcc-win32 C 2.4.1 in D:\PROGRA~1\MATLAB\R2008b\sys\lcc
[2] Microsoft Visual C++ 2008 in D:\Program Files\Microsoft Visual Studio 9.0
[1]是matlab自带的编译器,ms不够强悍,我是机子上装vs2008选[2],具体根据自己情况选择。
装好了以后就不用再装了。
b)生成com组件
matlab命令行窗口中运行deploytool,启动deployment tool
新建project->选择matlab builder NE->选择generic com component->输入project名称"test",确定->add file->build the project 开始生成com组件,生成后会自动regsvr32 test_1_0.dll
注:matlab 2007以前的版本使用comtool来生成com组件,之后的版本都没有comtool都是用deploytool.
3.在vs2008中调用com组件
a)第一次使用时要注册 mwcomutil.dll。
在“运行”中输入regsvr32 matlab安装路径\bin\win32\mwcomutil.dll。
b)创建c#工程,在reference中添加生成的com组件 test_1_0.dll。
c)添加需要调用的地方调用代码
test.testClass ts = new test.testClass();
object c=0, a=1, b=1;//调用前需要先初始化包括输出在内的所有参数
ts.add(1, ref c, a, b); //c前需要添加ref,1表示的应该是输出参数的个数(个人猜测)
注:参数的类型必须是object,matlab函数function [c]=add(a,b)生成的对应的c#函数格式为void add(int i,ref object c,object a,object b);