本文转载自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. 【C#进阶系列】04 类型基础

    关于System.Object 所有类型都从System.Object派生而来. System.Object的公共方法中ToString()一般是返回对象的类型的全名,只有Int32这些类型将其重写后 ...

  2. 译 PrestaShop开发者指南 第四篇 深入PrestaShop核心开发

    ## 访问数据库 ### 数据库结构 PrestaShop的数据库表默认带有ps_的前缀,前缀在安装时可以自定义. 所有表名都是小写,以下划线分割.当一个表表示要在两个实体间建立连接时,表名中两个实体 ...

  3. C++ Qt 框架静态编译 操作记录

    谁愿意写个程式出来之后还附带一堆DLL,尤其是名字如此明显的名字. 于是在网上看了看,是需要下载源代码然后进行编译的,但是看了看别人说的编译时间,长达几个小时,瞬间就感觉不想做了.因为我还需要抓紧时间 ...

  4. [javaSE] 练习队列线程和对象序列化

    主要练习了队列数据结构,对象序列化和反序列化,多线程操作 import java.io.BufferedReader; import java.io.File; import java.io.File ...

  5. CentOS常用指令

    创建文件: 如touch a.txt 创建文件夹: mkdir -p 文件夹名,当文件夹不存在时候,创建这个文件夹 文件重命名: 把文件text.php得命名为index.php,可以是rename ...

  6. PHP的静态变量和引用函数

    直接贴代码,结果的原因写在备注了 <?php /** * Created by PhpStorm. * User: Administrator * Date: 16-8-25 * Time: 上 ...

  7. 【iOS】Quartz2D截屏

    一.简单说明 在程序开发中,有时候需要截取屏幕上的某一块内容,比如捕鱼达人游戏.如图: 完成截屏功能的核心代码:- (void)renderInContext:(CGContextRef)ctx;调用 ...

  8. 度娘果然毫无节操,纯粹就是order by 广告费 desc

    度娘果然毫无节操,纯粹就是order by 广告费 desc 必应搜索出来排第一,度娘根本就找不到在哪....

  9. MongoDB整合Spring

    1.环境 Jdk:1.6.0_10-rc2 Spring3.1.2  下载 依赖jar文件: 2.相关配置 ①.Spring配置文件 <?xml version="1.0"  ...

  10. For循环语句的使用

    一.For循环语句 说明:For循环用于循环次数已经确定的情况下.  格式:for(循环变量赋初值; 循环条件; 循环变量增值)       {             ·····语句  } 举例:求 ...