77范文网 - 专业文章范例文档资料分享平台

关于matlab与c#混合编程的问题(8)

来源:网络收集 时间:2019-02-17 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

2) 上面的ctf其实是包含在dll程序集里面的,以资源的形式,这个文件是核心,它才真正的包括了Matlab编译之后的,MCR可以运行的中间程序。

3) 必须要合法正确的ctf文件和dll文件才能 正确的初始化mcr对象,合法的意思,是Matlab内部有校验机制,包括对相关版本,在以前的版本生成文件中,很明显,现在2012a里面都隐藏起来了,不过要求都一样。

4) 上面方法其实已经间接的告诉了我们怎么初始化mcr对象,有了mcr对象,一切都好办了,因为它才是MCR的核心。

3.PlotTest封装的方法代码

1publicvoid PlotTest() 2 {

3 mcr.EvaluateFunction(0, \, new MWArray[]{}); 4 }

5publicvoid PlotTest(MWArray n) 6 {

7 mcr.EvaluateFunction(0, \, n); 8 }

9public MWArray[] PlotTest(int numArgsOut) 10 { 11return mcr.EvaluateFunction(numArgsOut, \, new MWArray[]{}); 12 }

13public MWArray[] PlotTest(int numArgsOut, MWArray n) 14 {

15return mcr.EvaluateFunction(numArgsOut, \, n); 16 }

看了字段代码,再对应mcr的初始化,其实都很明朗了。通过mcr的EvaluateFunction来调用M函数。上面的代码有几个重载方法,可以实用很多不同的情况,有时候,这些方法的个数会更多,其实没多大必要,也可以自己编译一下,把没用的删掉,保留少数几个有用的即可。同时也可以看到,这里直接通过字符串来传递函数名称的,因此必须保证这个函

数能被mcr搜索到。比如我们这里的\这个函数其实就包含了ctf文件中(注意ctf文件是可以和dll分开的,在混编项目里可以设置)。

回到目录

3.上述代码到内置函数的调用

上述已经讲解了整个mcr调用的过程,其实就是通过mcr的EvaluateFunction来调用M函数,但要保证对于的函数名称在mcr搜索的范围内。那么我们是不是可以假设:内置函数都在MCR内部,应该是可以搜索到的,那么把上面的函数名称换一下,是不是也是可行的。这个假设也是我最早接触时候的想法,有了假设,当然要去验证。现在看来这个当然是肯定的,那么不妨重新演示一遍。过程不详细讲了,代码也有注释,混编要引用的MWArray.dll和命名空间也不提了,看代码:

1using System;

2using System.Collections.Generic; 3using System.Linq; 4using System.Text;

5using System.Reflection; 6using System.IO; 7

8using MathWorks.MATLAB.NET.Utility; 9using MathWorks.MATLAB.NET.Arrays; 10 11

12namespace BuildInFunctionDemo 13 {

14class Program 15 {

16static MWMCR mcr;

17staticvoid Main(string[] args) 18 {

19#region 首先使用PlotTest.dll来初始化mcr,因为这个dll是混编“合法”产生的,只有这样才能顺利启动mcr

20if (MWMCR.MCRAppInitialized) 21 {

22string path = Path.Combine(System.Environment.CurrentDirectory, \);

23 Assembly assembly = Assembly.LoadFile(path); 24string ctfFilePath = assembly.Location;

25int lastDelimiter = ctfFilePath.LastIndexOf(@\);

26 ctfFilePath = ctfFilePath.Remove(lastDelimiter, (ctfFilePath.Length - lastDelimiter)); 27string ctfFileName = \;

28 Stream embeddedCtfStream = null; 29 String[] resourceStrings = assembly.GetManifestResourceNames(); 30

31foreach (String name in resourceStrings) 32 {

33if (name.Contains(ctfFileName)) 34 {

35 embeddedCtfStream = assembly.GetManifestResourceStream(name); 36break;

37 } 38 }

39 mcr = new MWMCR(\,ctfFilePath, embeddedCtfStream, true);

40 } 41else

42 {

43thrownew ApplicationException(\initialized\); 44 } 45#endregion 46

47#region 直接调用混编dll中的封装函数进行测试

48 mcr.EvaluateFunction(0, \, 5); 49

50//注意这里要断点调试才能看到效果哦,因为mcr会把图绘制在一个Figure上面,

51//后面的会覆盖前面的,这里暂停一下,可以看前面的效果 52//下面就是直接调用matlab的plot函数的效果

53 MWNumericArray x = newdouble[]{1,2,3,4,5};

54 MWNumericArray y = newdouble[]{2,1,2.8,5.3,4.7}; 55 mcr.EvaluateFunction(0, \,x,y ); 56#endregion

57

58 Console.ReadKey(); 59 } 60 } 61 }

唯一要注意的就是50-52的说明,要加断点看2次绘制的效果。分别截图如下:

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库关于matlab与c#混合编程的问题(8)在线全文阅读。

关于matlab与c#混合编程的问题(8).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/479020.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: