本文转载自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. DBSet Class(EF基础系列11)

    Method Name Return Type          Description Add Added entity type Adds the given entity to the cont ...

  2. P6 EPPM 安装与配置指南 16 R1 2016.4

       关于安装和 配置P6 EPPM 本指南告诉你如何自动 安装和配置您的应用程序. 在您开始之前,阅读 先决条件 P6 EPPM配置 (7页). 安装P6 EPPM 您将使用 安装程序 (窗口) . ...

  3. html图片上下翻滚展示代码

    <marquee behavior="alternate" scrolldelay="1" direction="up" width= ...

  4. php Calender(日历)代码

    代码如下: <?php /** * * 我的日历 * date_default_timezone_set date mktime * @param int $year * @param int ...

  5. 【jQuery基础学习】06 jQuery表单验证插件-Validation

    jQuery的基础部分前面都讲完了,那么就看插件了. 关于jQuery表单验证插件-Validation validation特点: 内置验证规则:拥有必填.数字.E-Mail.URL和信用卡号码等1 ...

  6. Apns推送中的的json格式介绍

    在开发向苹果Apns推送消息服务功能,我们需要根据Apns接受的数据格式进行推送.下面接受我在进行apns推送时候总结的一点apns服务接受的Json数据格式 示例 1: 以下负载包含哦一个简单的 a ...

  7. 后缀数组---Musical Theme

    POJ   1743 Description A musical melody is represented as a sequence of N (1<=N<=20000)notes t ...

  8. jar包和war包的区别(转)

    jar包和war包的区别:war是一个web模块,其中需要包括WEB-INF,是可以直接运行的WEB模块.而jar一般只是包括一些class文件,在声明了Main_class之后是可以用java命令运 ...

  9. SQL Server Insert时开启显式事务

    如果没法避免一条一条的写入,那么在处理前显示开启一个事务 begin tran  在处理完成后 commit 这样也要比不开显示事务会快很多! while i < 10000begin inse ...

  10. mysql bin-log和innodb_log的关系

    首先,二进制日志会记录所有与MySQL数据库有关的日志记录,包括InnoDB.MyISAM.Heap(memory除外)等其他存储引擎的日志.而InnoDB存储引擎的重做日志记录有关该引擎本身的事务日 ...