VS2008 和 MatlabR2015a 混合编程

2023-05-16

唉,在做支持向量机分类优化实验的时候,支持向量机的c#代码写的头疼。有些核函数和分类训练函数不会写,搞得头疼。后来听同学介绍说matlab里面有包直接可以用,我又去载了一个R2015a最新的matlab,特么现在又遇到问题。Matlab语法不会啊,咋用??
然后我查了些资料,说vs2008可以和matlab进行混合编程,如果能实现,将会减少很多的工程量。我看了网上的教程,都以vs2008和matlab2010a为例进行的,而这个和最新的matlab2015a还是有很大的区别,最后我打算去重新做一次。


注意: 下面进行实验的版本是 vs2008和MatlabR2015a
只要按照我下面的步骤一步步下去,一定能实现。


一、VS准备阶段
1. 先建一个C# 接口,在C# 里面新建一个类库,为了命名易懂,我们命名为DemoTestInterface :如下图所示:
 


2. 然后 点击“生成” -》配置管理器。
3. 我的matlab是64位的,所以把平台的配置改为×64.
 
(从活动解决方案平台那里添加)


4. 然后我们添加MWArry.dll , 右键添加引用, 路径为:..\MATLAB\toolbox\dotnetbuilder\bin\win32\v2.0\
本机的位置是: 


(有些vs2008的位置是在,可以直接在.Net 选项卡中找到, MathWorks, .NET MWArray API。 在此选项卡中,按键盘上的“ M”,出现的第一个,就是所要的文件。 VS2010 中目前未能实现通过此方法添加。 也可以与 VS2010 一样,在浏览中添加,我在我的vs里面是没有找到这个东西,,尴尬~~)
添加后的内容为:
  


然后在添加using 命名空间。并修改类类型为 Interface 和相应的接口名。 并注意接口名与命名空间名不能一样。如下图所示:、


 
接下来我们拿矩阵乘法的例子进行示范:
添加所需要实现的 Matlab 函数声明,本例中实现的是两个矩阵的乘法,添加声明,其中
MWNumericArray 是 Matlab 与 C#的变量转换中间类,此处,只需要给出主函数的声明,子函数不需要声明。 如下图所示:
 


然后生成此接口(在bin/x64/debug目录下有
 
这个dll为接口。),待后面使用。




二、 matlab实现阶段
编写需要实现的主函数,函数名需要与 C#声明的函数名相同。如果需要使用到子函数,一
并编写子函数,此处使用子函数,将矩阵乘以 1。 由于本文只是一个示例,所以具体的变量保护的措施,建议最好在 C#调用 Matlab 之前就做好,结合本例,如两个矩阵不一样大小、等等。 注意主函数中的“ double”,如果希望主 C#调用的结果是 double 型的,此处需要强制转换成 double。
我在这里写了两个函数 MatrixMultiply   和SubFun
 


 

然后新建一个 Matlab 工程,直接在 Command Window 中输入 deploytool 创建,如下:


 
然后选择第三个liabrary compiler


 


得到下面一个界面:


 


我们将我们的工程名字命名为MatlabMultiply.prj。如下图所示: 




同时很关键的一点:   把类型改成 .NET Assembly ,
 


然后我们添加功能函数:   




然后 把右边的滚动条拉到最下面,我们进行设置。
需要设置两个地方,一个是.Net 设置,另一个是 Type Safe API,在.Net 设置中, Microsoft Framework 默认选择是 default,将此处按照目标环境修改,如 VS2008 就选择 3.5, VS2010 选择 4.0。 这里选择3.5。
在 Type Safe API 设置中,需要将上一步骤生成的接口文件复制到当前 Matlab 函数的文件夹中,并在 Interface assembly 中选中。如下图所示:


 
然后我们进行打包:   
点击“Package”。
 


等待其完成。。。

  


这样就表示完成了。我们可以打开生成文件,
生成的文件中一般需要用到的有如下三个文件, 
class1DemoTest.dll、 MatlabMultiplyNative.dll和 DemoTestInterface.dll。 特别的是,第二个文件,在 for_resdistribution_files_only 文件夹中,有一个名字类似,但是不带 Native 的文件,此文件不需要。 第三个文件,是此前 C#生成的接口文件。将此三个文件复制到需要调用的工程中,并添加引用。下一节会给出具体调用方法。


 
 




三、组合阶段
我们建一个简单的控制台程序。
 


添加刚才在matlab生成的接口dll文件。即 添加引用。 同时添加 MWArray.DLL接口文件。


 




然后在代码上端添加四个命名空间


 




然后以 Matlab 三个文件中的第一个文件 CSIDemoTest.dll 的文件名 CSIDemoTest 为类名,实例化一个类。然后编程:
 




我们进行调试,,



 
由此可以观察到,, 已经通过matlab实现矩阵的乘法。


下面的几个点是由大牛那里知道的: 
特此说明;。
关于中间类的说明:数据类型到 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 是 MWArray 与 C#等语言的转换中间类型。常用的转换函数:
1、 public Array ToArray(MWArrayComponent component);
将 M 类型转换成 C#的 Array 类型,然后可以直接转换成其它类型的数组。
2、 public byte ToScalarByte();
将 M 类型转换成 C#的字节类型;
3、 public double ToScalarDouble();
将 M 类型转换成 C#的双精度类型;
double temp = ((MWNumericArray)(mwArgout[0])).ToScalarDouble();
4、 public float ToScalarFloat();
将 M 类型转换成 C#的单精度类型;
5、 public int ToScalarInteger();
将 M 类型转换成 C#的整型类型;
6、 public long ToScalarLong();
将 M 类型转换成 C#的长整 C/C++/C#数据型类型;
7、 public short ToScalarShort();
将 M 类型转换成 C#的短整型类型;
8、 public override string ToString();
将 M 类型转换成 C#的字符串类型;
string arror = mwArgout[2].ToString();
9、 public Array ToVector(MWArrayComponent component);
将 M 类型转换成 C#的 Array 类型,然后可以直接转换成其它类型的数组。
下面使用调试过的代码示例表述 1 和 9 两个函数的区别:
1、 double[,] Temp1 = new double[1,3];
Temp1= (double[,])((MWNumericArray)mwArgout[1]).ToArray(MWArrayComponent.Real);
9、 double[] s1 = new double[2];
s1=(double[])((MWNumericArray)mwArgout[1]).ToVector(MWArrayComponent.Real);
从以上代码可以看出:函数 1 得到了二维数组,而 9 则是得到了一维数组。转换成 C++/C#数据类型后,它们的维数均为从 0 开始。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

VS2008 和 MatlabR2015a 混合编程 的相关文章

  • MFC与.NET混合编程

    1 xff1a VS2008 建立 MFC程序 xff1b 2 xff1a Alt 43 F7 设置 xff1a 公共语言运行库支持 xff08 选择 xff09 公共语言运行库支持 clr xff1b 3 xff1a 添加 Net相应库
  • keras上手之:与tensorflow混合编程

    tensorflow具备许多优秀的函数和功能 xff0c 比如tensorboard xff0c keras作为tensorflow的高级API xff0c 封装很多tensorflow的代码 xff0c 使得代码模块化 xff0c 非常方
  • VS2008——调试方法大全

    一 断点调试 总结以下VS2008的调试方法 xff0c 首先最常用的就是使用断点了 xff0c 断点分为两种 xff1a 普通断点 跟踪点 普通断点就是红色圆点 xff0c 跟踪点是红色菱形 可以通过右键设置断点相关内容 xff0c 让断
  • VS2010(VS2008)下安装配置OpenCV

    研究生课题做嵌入式图像处理方向 xff0c 所以主要涉及的知识就是嵌入式Linux 43 OpenCV 43 QT xff0c 主要OpenCV和QT都是跨平台的 xff0c 而且充分利用好的话再后期的算法设计和功能扩展上就方便很多 只是之
  • 时隔一年,C++加python 的混合编程(包括python无环境发布)

    时隔一年 xff0c 上一篇文档比较LOW一点 xff0c 实现了python2 7的混合编译 xff0c 可发布无PYTHON环境的机器 发布也是比较LOW xff0c 文件特别大 编译版本 xff1a python 3 7 2 xff0
  • 酷Q 二次开发 C++SDK 加python混合编程

    酷Q 源代码 xff1a https github com richardchien coolq cpp sdk 不用问我这个怎么用啊 xff0c 去酷Q社区去看看 xff0c 会C 43 43 开发的应该很简单 xff0c 实在不会留言我
  • IE8正式版引发VS2005和VS2008添加变量向导出错的解决方案

    1 解决办法1 xff1a 2 卸载IE8 3 解决办法2 xff1a xff08 自己使用的方法 xff09 4 5 打开注册表编辑器 6 7 选择 HKEY CURRENT USER Software Microsoft Windows
  • VS2008 和 MatlabR2015a 混合编程

    唉 xff0c 在做支持向量机分类优化实验的时候 xff0c 支持向量机的c 代码写的头疼 有些核函数和分类训练函数不会写 xff0c 搞得头疼 后来听同学介绍说matlab里面有包直接可以用 xff0c 我又去载了一个R2015a最新的m
  • C++与QML混合编程

    一 前言 简单来说 xff0c 混合编程就是通过Qml高效便捷的构建UI界面 xff0c 而使用C 43 43 来实现业务逻辑和复杂算法 Qt集成了QML引擎和Qt元对象系统 xff0c 使得QML很容易从C 43 43 中得到扩展 xff
  • MFC与.NET混合编程

    1 xff1a VS2008 建立 MFC程序 xff1b 2 xff1a Alt 43 F7 设置 xff1a 公共语言运行库支持 xff08 选择 xff09 公共语言运行库支持 clr xff1b 3 xff1a 添加 Net相应库
  • Qt for iOS,Qt 与Objective C混合编程

    因为我写了一系列Qt的博文以及一本书 Qt on Android核心编程 xff0c 最近有好几个使用Qt的朋友问起 Qt for iOS 的事情 xff0c 因为我在这方面的经验特别少 xff0c 写不出系统的文章来 xff0c 非常抱歉
  • VS2008与Matlab混合编程设置

    VS2008 与MATLAB R2009b 混合编程环境配置 一 xff0c VS2008 中的函数调用matlab的写好的函数 1 Matlab 生成 DLL 1 1 编译器的安装 实验环境 xff1a XP 32 位机MATLAB R2
  • 【VS2010学习笔记】【异常处理】二(VS2008/VS2010中MFC“资源被另一个编辑器打开”)

    问题 VS2008 VS2010中MFC 资源被另一个编辑器打开 的有关问题 解决方法 菜单 窗口 选择 关闭所有文档 再次打开就可以了
  • Matlab如何打包成jar并给java使用(混合编程)

    Matlab如何打包成jar并给java使用 由于期末数字图像课程设计需求 使用matlab码好了函数可是没有界面 所以打算用jsp随便搞一搞 可是这样就要跨语言编程了 说得很高大上其实就是打成jar然后丢到项目lib包里面去 这时就需要打
  • VS2008配置opencv

    配置过程 1 需要先提前安装好VS2008并下载好opencv的库 2 配置Windows环境变量 具体步骤为 右键我的电脑 属性 详细设定标签里 gt 环境变量 gt 系统变量 找到Path 将D Program Files opencv
  • Opencv2.4.2+vs2008+windowsXP(32位)安装过程

    Opencv2 4 2 vs2008 windowsXP 32位 安装过程 准备软件 opencv2 4 2 VS2008软件 1 解压opencv2 4 2到指定路径 例如 D Program Files OpenCV2 4 2 2 打开
  • c++/c混合编程

    一 前言 代码从编写到能执行之前 需要经过编译 链接阶段 通常 编译每一个单元文件会生成目标文件 然后链接器会把各个目标文件链接起来生成可执行性文件 链接器之所以能把目标文件相互之间链接起来 就是通过查找目标文件中的唯一函数符号 即经过编译
  • Qt5中使用C++调用Python

    最近想把C 和Python一起混合编程 故作此文记录整个过程中的 坑 首先打开QtCreator 新建一个QtConsoleApplication 建立好了之后 在你的配置文件下面添加包含目录和库目录 INCLUDEPATH I D Pro
  • 如何在 Java 中调用 MATLAB 代码

    文章目录 测评 完整源代码 运行环境 MATLAB R2022a Java 8 1 8 0 311 IntelliJ IDEA 2022 2 1 Ultimate Edition Maven 3 8 3 Windows 10 教育版 64位
  • VS项目属性的一些配置项的总结(important)

    以下内容为 原创 转载 首先 解决方案和项目文件夹包含关系 c 项目 VS解决方案和各个项目文件夹以及解决方案和各个项目对应的配置文件包含关系 假设新建一个项目ssyy 解决方案起名fangan 注意解决方案包括项目 此时生成的最外层目录为

随机推荐

  • torch.utils.data.dataloader参数collate_fn简析

    torch utils data DataLoader是pytorch提供的数据加载类 xff0c 初始化函数如下 xff0c torch utils data DataLoader dataset batch size 61 1 shuf
  • 软件工程—— 学校人力资源管理系统说明

    课程设计内容 1 设计目的 人力资源管理系统 是事业单位最基本的人事管理系统 用户可以通过该系统 xff0c 管理事业单位内部职工的档案 进行人事考勤 xff0c 准确无误地记录职工的出勤情况 xff1b 全自动生成职工的工资表 xff0c
  • 梯度下降方法中的学习率(learning rate), 衰减因子(decay) 冲量(momentum)

    本文总结自如下两个链接的内容 xff0c 建议读者直接阅读链接中的文章 1 https www jianshu com p 58b3fe300ecb 2 https www jianshu com p d8222a84613c 学习率 学习
  • Linux下Python 缩进 SyntaxError: 'break' outside loop

    这段代码将会报错 xff0c SyntaxError 39 break 39 outside loop 因为Python要求严格缩进 xff0c while循环的内容所有都必须缩进一空格 while循环体覆盖了剩下所有代码 因为if els
  • Linux ZRAM的简单介绍

    1 概念 zram 又称内存压缩 xff0c Linux kernel会把不常用的内存进行压缩 xff0c 以换出更多的内存供系统使用 平时空闲时候会做压缩 xff0c 以备不时之需 kernel 申请不到内存 xff0c 会触发压缩机制
  • 07 - 如何查看镜像及MySQL各环境参数的说明(Docker系列)

    本文章来自 知识林 在 06 分析docker run hello world xff08 Docker系列 xff09 一文中看到了docker run hello world xff0c 也描述了hello world是镜像名称 xff
  • Bootloader 相关概念理解及测试用例设计

    一 什么是Bootloader 单看单词 xff1a boot v 启动 xff1b loader n 装货设备 xff0c bootloader存在的意义就是指更新App程序 xff0c 以下简称bl 在14229规范中的Boot Sof
  • PixHawk飞控 配置参数

    PixHawk飞控 PixHawk是著名飞控厂商3DR推出的新一代独立 开源 高效的飞行控制器 xff0c 前身为APM飞控 xff0c 不仅提供了丰富的外设模块和可靠的飞行体验 xff0c 有能力的爱好者还可在其基础上进行二次开发 第一次
  • strcat函数--字符串连接函数

    strcat是STRing CATenate 字符串连接 xff09 的缩写 xff0c 调用strcat函数首先要有 lt string h gt 这个头文件 xff0c 它的作用是把两个字符数组中的字符串连接起来 xff0c 把字符串2
  • 最新使用深度相机D435i运行Vins-fusion并建立octomap八叉树栅格地图

    目录 一 xff0c 软件安装 二 xff0c 配置参数 三 xff0c 使用Vins fusion建立Octomap 四 xff0c 使用 DenseSurfelMapping建立Octomap 先决条件 Ubuntu 64 bit 16
  • 2022-10-13 js中数组删除对象

    JavaScript splice 方法 说明 xff1a splice 方法可删除从 index 处开始的零个或多个元素 xff0c 并且用参数列表中声明的一个或多个值来替换那些被删除的元素 数组 splice 数组索引下标 个数len
  • mmcv 报错undefined symbol: _ZNK2at6Tensor7is_cudaEv

    gt gt gt from mmcv ops import nms Traceback most recent call last File 34 lt stdin gt 34 line 1 in lt module gt File 34
  • 学校人力资源管理系统可行性分析

    学校人力资源管理系统可行性分析 一 技术可行性 硬件实施的可行性 xff0c 学校电脑配置相对较高 xff0c 可满足信息系统运行的需要 xff1b 学校可以采用常用的数据库应用程序开发工具实现学校内部的业务管理是完全可行的 xff0c 不
  • Jetson TX2 刷机教程(JetPack4.2版本)

    自从NVIDIA出现JetPack4 2 Ubuntu18 04 版本之后 xff0c 安装方式和之前就大不相同 xff0c 看了前面的几个安装版本之后 xff0c 感觉新版的好像安装起来更加简洁了 xff0c 只需要一个SDK就可以 xf
  • FactSystem设计思路

    Fact System 模块设计思路与学习总结 组成结构 FactSystem xff08 事件系统 参数系统 xff09 FactControls xff08 事件控制 xff09 FactPanelController xff08 事件
  • GPS设计思路

    GPS模块设计思路与学习总结 1 组成结构 Drivers src xff08 驱动程序资源包 xff09 gps helper xff08 GPS助手 xff09 ubx xff08 UBX协议 xff09 RTCM RTCMMavlin
  • ipv4和ipv6的区别

    ipv4 和ipv6 的区别本质在于它们的二进制表示位数 xff0c ipv4是用32位0 1序列来表示的 xff0c 而ipv6使用128位0 1序列来表示的 ipv4用32位 xff0c 为了方便人类记录和阅读 xff0c 我们通常将i
  • PHP字符串函数strrev(反转字符串)

    在PHP中 xff0c 字符串函数 strrev 用来反转字符串 函数语法 xff1a strrev string string string 函数参数说明 xff1a 参数描述string必需 规定要反转的字符串 strrev 用来反转字
  • STL(标准模板库)中class并不一定是“类”

    在模板库里面 xff0c 可谓 处处 皆模板 xff0c 当然了不是模板就不叫模板库了 xff0c 但是有一点经常让人忽视 xff0c 使用模板时候 xff0c 类就真的时候类 xff1f 也就是说class就真的是类 xff1f 答案是否
  • VS2008 和 MatlabR2015a 混合编程

    唉 xff0c 在做支持向量机分类优化实验的时候 xff0c 支持向量机的c 代码写的头疼 有些核函数和分类训练函数不会写 xff0c 搞得头疼 后来听同学介绍说matlab里面有包直接可以用 xff0c 我又去载了一个R2015a最新的m