惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Jina AI
Jina AI
V
Vulnerabilities – Threatpost
Security Latest
Security Latest
AI
AI
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
量子位
H
Help Net Security
Attack and Defense Labs
Attack and Defense Labs
The GitHub Blog
The GitHub Blog
L
LINUX DO - 最新话题
A
Arctic Wolf
博客园_首页
S
Securelist
S
Secure Thoughts
Google DeepMind News
Google DeepMind News
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
T
Tailwind CSS Blog
Apple Machine Learning Research
Apple Machine Learning Research
酷 壳 – CoolShell
酷 壳 – CoolShell
Stack Overflow Blog
Stack Overflow Blog
N
Netflix TechBlog - Medium
Cyberwarzone
Cyberwarzone
小众软件
小众软件
T
Threatpost
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Blog — PlanetScale
Blog — PlanetScale
N
News and Events Feed by Topic
NISL@THU
NISL@THU
Forbes - Security
Forbes - Security
博客园 - 聂微东
F
Fortinet All Blogs
Simon Willison's Weblog
Simon Willison's Weblog
H
Heimdal Security Blog
罗磊的独立博客
S
Security @ Cisco Blogs
B
Blog
T
Troy Hunt's Blog
Engineering at Meta
Engineering at Meta
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
The Hacker News
The Hacker News
The Last Watchdog
The Last Watchdog
Hacker News - Newest:
Hacker News - Newest: "LLM"
I
Intezer
T
Threat Research - Cisco Blogs
C
Cybersecurity and Infrastructure Security Agency CISA
The Cloudflare Blog
S
Schneier on Security
月光博客
月光博客
L
LINUX DO - 热门话题
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org

博客园 - 老博客哈

[深入浅出系列]System.Environment HDU第11版解题报告(农夫版) 第(前)k大数问题 SRM 144-149 Ajax开发框架(下)[整理] Ajax开发框架(中)[整理] Ajax开发框架(上)[整理] 语义网在线课程 Tidy - 一个把HTML 转成XHTML的工具库[整理] 2008企业级Web产品Top 10 (来源于ReadWriteWeb) (小规模)b牌棋盘完美覆盖数【整理】 一类棋盘互不攻击问题 稳定婚姻问题(Stable Marriage Problem) 2007 South Central USA Regional Programming Contest 解题报告 《C#完全手册》中提到的一些内部工具及编译选项 TC 泛黄了 Introduction to String Searching Algorithms--Rabin-Karp and Knuth-Morris-Pratt Algorithms [翻译] TopCoder C# User List TCHS SRM 1
C#与Matlab混合编程的几种方式
老博客哈 · 2009-04-20 · via 博客园 - 老博客哈

2009-04-20 13:38  老博客哈  阅读(15679)  评论()    收藏  举报

      主要参考资料: 《Matlab C# Book》,我看的是第一版的电子书,网上可以搜到。

      说实话,我觉得C#与Matlab混合编程相比VC与Matlab混合编程没有啥优势,基本上还是通过P/V Invoke操作Matlab mcc编译器生成的C语言版本的DLL。此外,速度上也慢的吓人-_-

     下面简单写写C#与Matlab混合编程的4种方式(可能还不够全,欢迎补充):

1. 通过从Matlab的*.m文件中生成C语言版本的DLL

具体过程:

1) 在Matlab中写好一个m文件(比如一个简单的加法函数myplus.m);

2) 使用Matlab的mbuild -setup选择编译器,我机器上的编译器有两个LCC和VC2008(注意如果使用VS.net做应用的话,建议编译器选VC2008,否则C#中会告诉你DLL找不到Entry Point)

3) 在命令行中使用mcc -B csharedlib:mypluslib myplus.m (如果是多个M文件,接着往后写),等待几十秒之后会生成若干文件(*.c, *.h, *.dll等), 其中.h文件中有导出的函数原型。

4) 建立C#工程,并将前面的dll拷贝到合适路径,使用[ DllImport( "mypluslib.dll ", CallingConvention = CallingConvention.Cdecl)] 将.h文件中的函数使用C#的语法声明。一般来说,这些函数中会有**Initialize,**Terminate和M文件中定义的函数(**代表lib名称)。

5) 使用CsharpMatlabCompilerVer4.cs将C#中的数据类型和Matlab中的矩阵等类型进行变换。该文件定义了MatlabCSharp类,主要是导入了libmx.dll中的一些函数,并封装了一些实用的函数如double2mxArray_scalarReal等。

2. C#调用Matlab工作区计算并返回结果

主要使用engOpen, engClose, engPutVariable, engEvalString, engGetVariable函数进行操作。

大致过程如下:

MatlabCSharp.engPutVariable(ep, "ml_a", mx_a);
MatlabCSharp.engPutVariable(ep, 
"ml_b"
, mx_b);
MatlabCSharp.engEvalString( ep, 
"ml_c = ml_a + ml_b ;"
 );
mx_c 
= MatlabCSharp.engGetVariable(ep, "ml_c" );

3. 使用Matlab DeployTool生成COM组件

注: 老版本的叫ComTool,现在叫做DeployTool。在Command Window里面直接输入deploytool即可

1) 选择New Deployment Project -> MATLAB Builder NE -> Generic COM Component

2) 添加相应的M文件

3) 保存,编译

4) 新建C#工程,添加Reference, Ok

4. 使用Matlab DeployTool生成.Net组件

1) 选择New Deployment Project -> MATLAB Builder NE -> .Net Component

2) 添加相应的M文件

3) 保存,编译

4) 新建C#工程,由于经常要

using MathWorks.MATLAB.NET.Arrays;
using MathWorks.MATLAB.NET.Utility;

因此需添加MWArray这个Reference,一般安装玩MATLAB Builder NE就有了,放在GAC当中的。

暂时就知道这么多~