本文转载自http://www.cr173.com/html/10249_1.html

MWNumericArray是MWArray和c#中数据的中间类,怎么用?怎样在C参数?

a.double型、int型等数值类型的变量传递

MWNumericArray i = null, result = mydouble;

i=4;

myClass myclass = new myClass(); //实例化 
result = (MWNumericArray)myclass.myfunc(i);

b.字符串(需要用到MWCharArray和MWArray转换) 
MWCharArray FileName = myString; 
MWNumericArray sensitivity; 
sensitivity = (MWNumericArray)myClass.myAlgorithm((MWArray)

c.多个输出参数组成的数组 
MWNumericArray out_Arr = (MWNumericArray)out_Args[1]; //取的数组(matlab返回的数组下界是从1开始的) 
取出数组中的一个元素值 
mydouble=out_Arr[i].ToScalarDouble(); 
如上面例子ToScalarDouble一类的toXXXX等方法还有许多。 

d.result.toArray可以把matlab返回的矩阵变成C#的n x m数组,eg: 
double[,] csArray= (double[,])result.ToArray(MWArrayComponent

e.将数组传入Matlab(和传递单个数值的方法一样) 
double[,] dbx = new double[2, 2] { { 1, 2 }, { 3, 4 } }; 
MWNumericArray x=dbx; 
myclass.picture(x); 
________________________________________ 

M文件如何接收和返回? 
function x=test(h,d) //接收两个参数,返回一个 
function [x1,x2]=test(h,d) //返回数组 
________________________________________ 
以上为.Net方式连接,以下为COM方式连接(编译速度而言.net的方式要快上很多,而且似乎比较稳定) 
matlab编译工作 
- mbuild -setup 
- deploytool,Matlab Builder for .net,Generic COM Component 
- 添加m函数文件(eg: myfunc.m),改类名(eg: myComClass),build 
注册dll 
regsvr32 myCom.dll 
regsvr32 mwcomutil.dll 
VS2005调用: 
- Reference加Com控件 
- 调用示例 
double[,] arr = null; 
object in_a, out_a; 
in_a = 500; 
out_a = arr1; 
myCom.myComClass mc = new myCom.myComClass(); 
mc.myfunc(1, ref out_a, in_a); 
________________________________________ 

小例子:(提取matlab返回的两个参数并转化为C#的矩阵) 
Code 
testz.testzclass st = new testz.testzclass(); 
MWArray[] max = st.testz(2); 
MWNumericArray x1 = (MWNumericArray)max[0]; 
MWNumericArray x2 = (MWNumericArray)max[1]; 
double[,] location1 = (double[,])x1.ToArray(MWArrayComponent.Real); 
double[,] location2 = (double[,])x2.ToArray(MWArrayComponent.Real); 
label1.Text = location1[1,2].ToString(); 
其中的M文件: 
Code 
function [x1,x2]=testz() 
x1=[1 2 3; 
4 5 6; 
7 8 9;]; 
x2=[9 8 7; 
6 5 4; 
3 2 1;];

另一篇: 
以下是本人编程中总结的一些思路,拿出来与大家共享。不对之处,请留言说明。 
版本:Matlab R2007b ,Visual Studio 2005 
C++/C#数据类型到M类型 
此方向转换十分简单。 
如果C++/C#数据不是数组, 
• 直接将值传递给已经初始化的MWArray数组中的成员 
• 直接将数据类型赋值给已经初始化的MWNumericArray变量。 
• 直接将字符串类赋值给已经初始化的MWCharArray变量。 
如果是数组类型: 
• 直接赋值给MWNumericArray变量; 
• 赋值给MWArray变量,则在前面加上类型转换如:(MWNumericArray)进行强制转换。 
总之,MWArray是总类型,其它的以MW开头,以Array结尾的变量类型都可以直接对它进行赋值或取值。 
M类型到C++/C#数据类型 
MWArray 
M类型,它是M文件的编译后内部的标准类型,一切C++/C#类型都要最终转换成此类型,方可作为参数调用M语言函数。 
MWCharArray 
M的字符串类型,使用它可以将M中的字符类型转换成C++/C#的字符串类型。 
MWNumericArray 
MWNumericArray是MWArray与C#等语言的转换中间类型。 
常用的转换函数: 
① public Array ToArray(MWArrayComponent component); 
将M类型转换成C#的Array类型,然后可以直接转换成其它类型的数组。 
② public byte ToScalarByte(); 
将M类型转换成C#的字节类型; 
③ public double ToScalarDouble(); 
将M类型转换成C#的双精度类型; 
double temp = ((MWNumericArray)(mwArgout[0])).ToScalarDouble(); 
④ public float ToScalarFloat(); 
将M类型转换成C#的单精度类型; 
⑤ public int ToScalarInteger(); 
将M类型转换成C#的整型类型; 
⑥ public long ToScalarLong(); 
将M类型转换成C#的长整C/C++/C#数据型类型; 
⑦ public short ToScalarShort(); 
将M类型转换成C#的短整型类型; 
⑧ public override string ToString(); 
将M类型转换成C#的字符串类型;string arror = mwArgout[2].ToString(); 
⑨ public Array ToVector(MWArrayComponent component); 
将M类型转换成C#的Array类型,然后可以直接转换成其它类型的数组。 
下面使用调试过的代码示例表述①⑨两个函数的区别: 
① 
double[,] Temp1 = new double[1,3]; 
Temp1= 
(double[,])((MWNumericArray)mwArgout[1]).ToArray(MWArrayComponent.Real); 
⑨ 
double[] s1 = new double[2]; 
s1 = 
(double[])((MWNumericArray)mwArgout[1]).ToVector(MWArrayComponent.Real); 
从以上代码可以看出:函数①得到了二维数组,而⑨则是得到了一维数组。转换成C++/C#数据类型后,它们的维数均为从0开始。

C#与MATLAB之间传递参数的更多相关文章

  1. mvc中view与controll之间传递参数时,可以使用url进行传递

    mvc中view与controller之间传递参数时,可以使用url进行传递,但是在url的地址中需要加上“id=123”这样的东西才行. 具体如代码: window.location.href = ...

  2. JSP页面之间传递参数的方法有哪些?

    JSP页面之间传递参数的方法有哪些? 解答: 1)request 2)session 3)application 4)提交表单 5)超链接

  3. ASP.NET网页之间传递参数与值

    ASP.NET网页之间传递参数与值,方法很多,可以使用Application,Cookie,Session,或是Querystring等等.由于Insus.NET开发的程序中,多数是在后台之间进行参数 ...

  4. JS多个函数之间传递参数问题

    JS多个函数之间传递参数的一个重要思想是在页面定义一个隐藏域,当第一个函数请求到数据时候修改隐藏域的值,第二个函数用jQuery的选择器选择页面中隐藏域的值. 比如: 页面中定义一个隐藏的页号. &l ...

  5. Android学习总结——Activity之间传递参数

    核心内容:一.在 Activity 之间传递简单数据二.在 Activity 之间传递复杂数据 三.在 Activity 之间传递自定义值对象   软件环境:Android Studio   一.在 ...

  6. Android——软键盘操作+fragment之间传递参数+TextView限制字数,显示"..."

    原文地址: Android 手动显示和隐藏软键盘 Android隐藏输入法键盘(hideSoftInputFromInputMethod没有效果) Android Fragment传递参数_Fragm ...

  7. bean shell之间传递参数

    BeanShell PostProcessor 向 BeanShell断言 传递参数 断言成功:

  8. SpringMvc中两个Controller类之间传递参数的方法

    使用SpringMvc框架,在访问ControllerA的时候,将A里面的参数传递到ControllerB中.适用于同一框架下两个不同Controller或者由rpc(dubbo)连接的两个工程里的C ...

  9. angular中控制器之间传递参数的方式

    在angular中,每个controller(控制器)都会有自己的$scope,通过为这个对象添加属性赋值,就可以将数据传递给模板进行渲染,每个$scope只会在自己控制器内起作用,而有时候需要用到其 ...

随机推荐

  1. 数论 - 算数基本定理的运用 --- nefu 118 : n!后面有多少个0

     题目链接:http://acm.nefu.edu.cn/JudgeOnline/problemshow.php Mean: 略. analyse: 刚开始想了半天都没想出来,数据这么大,难道是有什么 ...

  2. 数论 --- 费马小定理 + 快速幂 HDU 4704 Sum

    Sum Problem's Link:   http://acm.hdu.edu.cn/showproblem.php?pid=4704 Mean: 给定一个大整数N,求1到N中每个数的因式分解个数的 ...

  3. GitHub Extension for Visual Studio 2.0 is now available

    GitHub Extension for Visual Studio 2.0 is now available We're pleased to announce that version 2.0 o ...

  4. js获取url参数的两种方法

    js获取参数,在以前我都是用正在去拆分,然后获取,这种方式感觉是最简单的 方式1: function QueryString(item) { var sValue=location.search.ma ...

  5. 介绍两种风格的URL

    两种风格的“动态资源”——统一资源定位符(Uniform Resource Lactor,URL) 当前互联网上主要有两种主要风格的URL: 第一种直接在URL中知名文件(比如xxx.php,xxx. ...

  6. sqlserver工作日常使用sql--持续完善中

    select STUFF('232',1,1,'')结果为32,从第一个字符开始去掉一个字符,及去掉 select CONCAT('-','asd')结果为-asd,连接两个字符串 select co ...

  7. [小北De编程手记] : Selenium For C# 教程目录

    写<Selnium For C#>系列文章的初衷是因为有很多朋友问我应该从哪里开始学习自动化测试,于是就为大家写下了这个系列的文章,希望对你有些帮助吧.而我想表达的是Selenium(同时 ...

  8. 【JavaEE】Hibernate继承映射,不用多态查询只查父表的方法

    几个月前,我在博问里面发了一个问题:http://q.cnblogs.com/q/64900/,但是一直没有找到好的答案,关闭问题以后才自己解决了,在这里分享一下. 首先我重复一下场景,博问里面举的动 ...

  9. C# 如何使用 svcutil.exe 创建 WCF 客户端代码

    工具:svcutil.exe 参数:指定wsdl.输出源码文件.输出配置文件 示例: D:\>svcutil.exe http://localhost:8087/DataService/?wsd ...

  10. Microsoft Dynamics CRM 2011/2013 JS操作集锦

    1.Xrm.Page.context用户ID:getUserId()用户角色:getUserRoles()用户语言:getUserLcid()组织名称:getOrgUniqueName()组织语言:g ...