本文转载自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. Array(数组)与Json String (Json字符串) 的相互转换

    1.Array转换成Json String             function jsonToString(arr) {             var s = "";     ...

  2. java四大域总结

    最近学完了web部分,发现有些地方总是单个容易理解,可是把所有的放在一起来大杂烩,总是有那么几个知识点容易混淆.其实网上的资料已经够多了,虽然也不乏辛劳的搬运工.可是最终的目的不就是要我们自身理解吗? ...

  3. Verilog学习笔记简单功能实现(一)...............D触发器

    module D_flop(data,clk,clr,q,qb); input data,clk,clr; output q,qb; wire a,b,c,d,e,f,ndata,nclk; nand ...

  4. mysqli连接数据库常见函数

    mysqli_free_result() 返回最后一次查询中使用的自动生成 id,如果是多表插入,返回的是第一个被插入的id. mysqli_query($con,"INSERT INTO ...

  5. 关联规则-R语言实现

    关联规则code{white-space: pre;} pre:not([class]) { background-color: white; }if (window.hljs && ...

  6. [git] ignore文件规则失效

    背景 在某次项目,发现已经将.iml规则写进.ignore文件,但是对.iml的修改依然会出现在changelist中. 解决方案 先引用git官网上的描述 gitignore - Specifies ...

  7. [js开源组件开发]js文本框计数组件

    js文本框计数组件 先上效果图: 样式可以自行调整 ,它的功能提供文本框的实时计数,并作出对应的操作,比如现在超出了,点击下面的按钮后,文本框会闪动两下,阻止提交.具体例子可以点击demo:http: ...

  8. C#将DataTable转化为List<T>

    C#将DataTable转化为List<T> 在使用三层架构开发一个网站时,希望把DataTable对象转换为List<T>对象,于是在网上找资料,总结一个比较方便的方法来实现 ...

  9. 关于HTML的编码问题

    平时我在写html文件时,很容易忘掉这个文件的编码类型,<meta charset=”utf-8”> 的语句,因为编辑器默认设置了一个编码,所以在我没有写编码格式设置语句的情况下,效果依然 ...

  10. 移动,企业社交(sharepoint2013)--jindahao(金大昊)

    MobileIncreasingly, a major component of sharing and collaborating involves mobile access. SharePoin ...