cpubbs论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

LabVIEW+单片机学习套件全套教程资料下载[免费]LabVIEW论坛精华列表贴USB0816数据采集卡《LabVIEW宝典》
LabWindows/CVI论坛精华贴NET0816以太网数据采集卡RC0210远程设备授权系统 关闭关停锁定打开设备 户外分布式数据采集
NET1624低速高精度以太网数据采集卡WIFI0824SD无线WIFI网络数据采集卡脱机运行 SD存储 小尺寸微型 串口采集远程采集 安卓 手持移动采集 纪录仪
查看: 6114|回复: 22

技术挑战:M文件的.NET控件生成及调用(时间延长至2008.1.1前)

[复制链接]
发表于 2007-11-19 09:45:48 | 显示全部楼层 |阅读模式
技术挑战:M文件的.NET控件生成及调用
时间:一周
开发软件版本:
matlab R2006a 或者更新的;
LabVIEW 7.0 or 更新;
visual studio .NET 2003或者2005
要求:将一个简单的matlab的M函数生成.NET控件,并在LabVIEW下调用。
比如:实现一个最简单的y=a+b;输入参数a,b;输出y,能实现最简单的加法运算1+2=3;
用途:以后可以将matlab的函数生成.NET控件,供LabVIEW调用,并脱离MATLAB的编程环境,便于系统集成。

看看谁能先攻破这个难点。首先攻破者加为精华贴。
同时附上最新用matlab R2007b生成的.NET控件,包含M程序和所有代码包。大家只需要调用里面的dotnetadd.dll作为.NET控件即可。

[ 本帖最后由 wdyjz 于 2007-11-23 10:43 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| 发表于 2007-11-19 09:47:18 | 显示全部楼层

提供一个数据类型的转换攻关!

在这个难题下最难做的是数据类型的转换,我先提供一个思路,其他朋友可以参考。因为我并没有真正攻破这个技术。
顺便附上一个我做的.NET控件
f=a+b

[ 本帖最后由 wdyjz 于 2007-11-19 16:30 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| 发表于 2007-11-19 16:28:15 | 显示全部楼层

我目前放弃攻关了,一直搞不定它

Matlab C/C++数学函数库中最基本的数据类型为矩阵对象,即mwArray类对象,几乎所有的库函数均以它们作为计算和处理的对象,掌握mwArray对象的操作,对于学习Matlab C/C++数学库的使用是至关重要的。
    Matlab C/C++数学库通过类mwArray对数值矩阵、稀疏矩阵、字符矩阵、单元矩阵和结构体矩阵提供了支持,矩阵对象的创建如下:

   
mwArray A; // 构造一个空矩阵对象
    mwArray A(double/int);     // 数子的矩阵对象
    mwArray A(int row, int col, double/int/unsigned short *real=NULL,
                                           double/int/unsigned short *image=NULL)
    mwArray A(const mwArray&)  // 拷贝构造矩阵对象

    C/C ++调用Matlab函数将大量使用矩阵对象的索引操作,完成C/C++数据到mwArray对象的赋值和mwArray对象到C/C++数据的检索。 Matlab C/C++函数库提供ExtractScalar和ExtractData两个函数完成索引操作。另外用GetDate()和 mxGetPr、mxGetPi组合可以得到指向mwArray对象的数据的指针。
发表于 2007-11-19 21:46:36 | 显示全部楼层
王兄,这个做好像对真正的应用计算适得其反,C/C++对于大量的数组及距阵式数据计算并不怎么样,只能是应用方便一些
.NET控件?不太明白为什么,
发表于 2007-11-20 11:29:13 | 显示全部楼层
为配合王兄的挑战,参加者并且做得好的朋友,送一个VIP虚拟仪器网店+联盟!呵呵!支持!
 楼主| 发表于 2007-11-20 16:21:37 | 显示全部楼层
Malab全球用的人太多了,尤其是所谓的教授、专家、博士等,其他LabVIEW他们估计也不怎么会用,毕竟在国内繁荣起来只是近几年的时间。我们如何吸收别人的精华并集成进来,而不让用户察觉到这个痕迹,当然要学会脱离matlab环境并集成技术为一个平台上来。这个很必要了,是原因之一。
.NET技术是微软VISTA的风行产品,有取代API技术之趋势,为了适合这个潮流,必须得掌握这个思想。这个是原因之二。

不过这个问题也是比较难的,本以为很简单,可是数据类型无法解决,卡住了。
发表于 2007-11-20 19:00:18 | 显示全部楼层
发表于 2007-11-20 19:31:14 | 显示全部楼层
不难看出,王兄已经走在了技术的前沿!
学习中。。。期待高手....
 楼主| 发表于 2007-11-23 10:32:07 | 显示全部楼层

一周的时间估计无人能解决了

因短期内恐怕无人能解决这个问题,延长到年底先。看看哪位朋友能在2008年1月1日之前做出来。
发表于 2007-11-23 10:51:50 | 显示全部楼层
好啊~~~大家一起看看~那我还得先去学习下.net框架
不过我有下面的疑问:
1、matlab生成com不是很好吗?而且com的本意是组件开发,作为二进制的格式(与具体编程语言无关,与操作系统无关,封装编程语言特性),感觉这已经是个完美的解决方案了,为什么还要.net?当然,我知道现在.net很火热~~应该有他的理由;(好像这个我在那篇com的帖子里问过了,但这里再问一下-_-!);
2、本来还想问下为什么.net可以取代api,但想到自己对.net一无所知,还是先去看下比较好~

PS:最近论坛有难度的问题好像减少了很多,希望多出现这样的“挑战书”,呵呵~~
祝论坛越办越专业,越办越好,高手越来越多!
 楼主| 发表于 2007-11-23 22:47:49 | 显示全部楼层
mwArray是Matlab C++ 函数库中对mxArray的包装类 ,类的操作?怎么结合起来呢?数据类型
 楼主| 发表于 2007-11-24 09:40:31 | 显示全部楼层
COM和API相关
http://www.rxiao.com/collection/csdn/程序人生/661608.xml
VC6的核心就是两大类库:MFC和ATL,前者是基于win32 API的一种FrameWork,后者是开发COM组件的类库,两者开发的是传统的Windows应用程序,学VC不学MFC,不学ATL几乎可以说没学VC!但遗憾的是学VC的人没有几个不为MFC中那些复杂的类之间的关系,那些奇怪的代码而头痛,ATL也好不到哪去,如果你事先没系统地学习COM理论,用ATL来发基于COM的组件几乎是不可能的。事实上,MFC框架就是一种设计模式,只不过微软的开发人员将其设计得非常完善罢了。
发表于 2007-12-18 16:37:19 | 显示全部楼层
实现,但是做得比较简单,还没有深入研究。
这里利用了matlab中自带的mwArray.dll进行数据类型的转化.

各位请指点指点.

这里使用的是labview8.5,visual studio 2005,matlab r2007b

[ 本帖最后由 sxd1988 于 2007-12-18 17:32 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| 发表于 2007-12-18 19:08:31 | 显示全部楼层
我先看下,流程走的很对。前些日子,在.NET2005下我也用visual studio .net 2005直接用代码编程测试过调用matlab生成的.net 控件,流程和网上一个朋友写的程序一样,可仍然是提示调用错误。当时怀疑,matlab和visual studio安装的有问题。然后用labview测试,同样的错误提示。
这个程序我下载运行,仍然是提示出错,可能和我的系统有关吧,等测试成功后再交流。
http://bingfeng.blog.edu.cn/user ... /2006/1579557.shtml (以前参考这个程序做的,并没有正确运行)
matlab builder for .net试用小结
彭哲, 2006-12-8下午,浙大求实园
今天心血来潮,来看看matlab7.3版本得matlab builder for .net对.net支持提高了多少
在过去的combuilder只能生成dll,所以如果在.net想调用该dll得话,还得按照dll得格式去调用,这与微软得技术路线不一致
下面来看下builder for .net
第一步:打开matlab builder for .net,在matlab下可通过命令deploytool来实现
第二步:新建deployment project,有4个选项,我们今天来测试for .net,假设项目名为untitled3
第三步:在untitled3class中添加m文件,比如我的test文件(这个文件在我前面得一篇matlab com builder文章中提到过http://bingfeng.blog.edu.cn/user1/9009/archives/2005/198777.shtml)
第四步:build the project
到此,.net文件已经制作完毕,下面来介绍下vs2003得c#调用此文件方法

第一步:新建c#工程以后,在解决方案资源管理器中添加引用MWArray,并到你生成的.net文件所在目录下添加你的.net文件,比如我所作的untitled3
并且在c#项目中using untitled3;
此时,你可以在对象浏览器中看到untitled3下面的untitled3class类,有成员public MathWorks.MATLAB.NET.Arrays.MWArray[] test
第二步:核心代码
  private void button1_Click(object sender, System.EventArgs e)
  {
   untitled3class  demo=new untitled3class();
   MathWorks.MATLAB.NET.Arrays.MWArray m=1,n=2;
   demo.test(m,n);
  }
现在就一切ok了

[ 本帖最后由 wdyjz 于 2007-12-18 19:47 编辑 ]
 楼主| 发表于 2007-12-18 19:23:58 | 显示全部楼层

兄弟你把你做成功的图片截取一个传上来

adddoubles.vi中的Error creating instance of adddoublesclass in assembly adddoubles.adddoublesclass, adddoubles, Version=2.0.2907.43086, Culture=neutral, PublicKeyToken=null, (System.TypeInitializationException: The type initializer for 'adddoubles.adddoublesclass' threw an exception.
        Inner Exception: System.MissingFieldException: Field not found: 'MathWorks.MATLAB.NET.Arrays.MWArray.MCRAppInitialized'.
)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|cpubbs论坛. ( 粤ICP备09171248号 )

GMT+8, 2024-5-17 14:31 , Processed in 0.564263 second(s), 8 queries , Gzip On, File On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表