64位MATLAB和C混合编程以及联合调试
【环境说明】
电脑操作系统:win 7 旗舰版,64位
MATLAB版本:R2013b
VS版本:Microsoft Visual Studio 2010
【操作说明】
1、在原来工程的基础上添加下列内容:
#include "mex.h" //添加库文件
#pragma comment(lib,"libmx.lib")
#pragma comment(lib,"libmex.lib")
#pragma comment(lib,"libmat.lib") //下面这个是MATLAB和C进行通信的函数
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
// 注意:nrhs代表的是输入变量的多少,而不是一个变量维数的大小
// 定义一个double类型的数组
unsigned int *outData;
double test_data[];
double test_data_out[];
unsigned int data_in[];
double *real_data_ptr;
double *real_data_ptr_out;
int loop_XDZ;
unsigned int back_length_my;
outData=chk_alloc(, sizeof *outData);//初始化分配内存空间的过程
real_data_ptr_out=mxCalloc(, sizeof(char)); //申请空间
real_data_ptr=mxGetPr(prhs[]);
plhs[] = mxCreateDoubleMatrix(,,mxREAL); //让第一个输出参数指向一个1*1的矩阵
real_data_ptr_out=mxGetPr(plhs[]); //获得矩阵的第一个元素的指针
for (loop_XDZ=;loop_XDZ<;loop_XDZ++) //循环获取编码之前的数据源
{
test_data[loop_XDZ]=*real_data_ptr++;
data_in[loop_XDZ]=(unsigned int)test_data[loop_XDZ];
}
back_length_my = DCW_LDPCencode_packaged(data_in,outData,,);//最后一个参数是控制加扰与否的选项
//下面是需要把数据送到外面去
for (loop_XDZ=;loop_XDZ<;loop_XDZ++) //循环获取编码之前的数据源
{
test_data_out[loop_XDZ]=(double)outData[loop_XDZ];
*real_data_ptr_out++=test_data_out[loop_XDZ];
}
return;
}
在上面的函数中,我调用了工程的顶层模块DCW_LDPCencode_packaged,这个模块实现的主要功能是,输入一定长度的数据,输出一定长度的信息。
2、配置VS工程属性
- 在常规选项卡中,把文件的扩展名设置为.mexw64;
- 在VC++目录选项卡当中,更改包含目录为\MATLAB\extern\include文件夹;
- 在VC++目录选项卡当中,更改库目录为\MATLAB\extern\lib\win64\microsoft;
- 在链接器-输入选项卡当中,添加附加依赖项libmat.lib、libeng.lib、libmx.lib、libmex.lib;
- 在下面的模块定义文件中,设置为test.tdf(这个文件需要自己创建);
【特别补充】在链接器->常规 界面上,需要修改输出文件的形式,否则无法正常生成mexw64文件!!!!!!
- 新建文本文档,更改名称为test.tdf。用文本编辑软件打开文件,更改其中的内容为:
LIBRARY DCW_Packaged_RS_LDPC_encode_decode(这个是工程的名称,不是顶层名称)EXPORTS mexFunction
- 最后更改配置管理器,将项目改成x64属性,沿用win32的工程配置。
3、MATLAB文件
out_data=DCW_Packaged_RS_LDPC_encode_decode(enc_data,len_sel,scramble_en);
在MATLAB中写上面这一句就可以完成调用的过程。DCW_Packaged_RS_LDPC_encode_decode是工程的名字,也是.mexw64文件的名字。左边是输出的参数,右边是输入的控制参数。
4、编译工程,进行连接
右键点击VS工程的名字,选择 生成。发现工程的x64->Debug文件夹下面会生成一个后缀为.mexw64的文件。
更改MATLAB的工作目录为x64->Debug文件夹(就是.mexw64所在的文件夹)。
在VS中选择 调试 选项卡,选择 附加到进程…… 选项,选择MATLAB.exe,并且在VS中设置断点。
运行MATLAB程序,即可在VS中触发断点进行联合调试。
【参考文献】
值得参考的文献网址:
1、https://www.cnblogs.com/sea-wind/p/5712479.html
2、http://www.cnblogs.com/tjulxh/archive/2012/04/23/2467087.html
在64位的系统中,非常实用的参考文章:
http://blog.sciencenet.cn/blog-568124-757193.html
64位MATLAB和C混合编程以及联合调试的更多相关文章
- Matlab与C++混合编程(依赖OpenCV)
Matlab与C++混合编程实际上就是通过Matlab的Mex工具将C++的代码编译成Matlab支持调用的可执行文件和函数接口.这样一方面可以在Matlab中利用已经编写好的函数,尽管这个函数是用C ...
- [转] Matlab与C++混合编程(依赖OpenCV)
作者 zouxy09@qq.com,原文 Matlab与C++混合编程(依赖OpenCV) 之前在运行别人论文的代码的时候,经常有遇到Matlab与C++混合编程的影子.实际上就是通过Matlab的M ...
- [转] Matlab与C++混合编程,添加OpenCV库
原文地址 峰回璐转 最近在做运动医学软件优化工作,此款软件框架及算法语言全由matlab实现,虽然matlab矩阵运算.数值计算能力强大,但速度让人难以忍 受.软件立刻移植到C++上又不太实际,故采用 ...
- Matlab与C++混合编程,添加OpenCV库
最近在做运动医学软件优化工作,此款软件框架及算法语言全由matlab实现,虽然matlab矩阵运算.数值计算能力强大,但速度让人难以忍受.软件立刻移植到C++上又不太实际,故采用联合编程的方式,速度难 ...
- 算法库:Matlab与C++混合编程
算法库:Matlab与C++混合编程 最近做光流算法预演过程中,下载的源码中涉及到了Matlab和C++的混合编程.在同事Matlab2014的环境下,程序到是一下就运行通过了.但在我这Matlab2 ...
- 【目录】Matlab和C#混合编程文章目录
本博客所有文章分类的总目录链接:[总目录]本博客博文总目录-实时更新 1.Matlab和C#混合编程文章目录 9.接触Matlab10年后的一个总结,随时使用Matlab要掌握的一些要点 8.国内第一 ...
- Matlab与.NET混合编程解决人脸识别问题
原文:[原创]Matlab与.NET混合编程解决人脸识别问题 如果这些文章对你有用,有帮助,期待更多开源组件介绍,请不要吝啬手中的鼠标. [原创分享]Matlab.NET混编调用Figure窗体 ht ...
- matlab与vs混合编程/matlab移植
前言 项目算法中包含了不同编译工具的代码,分别是matlab和VS,需要将二者结合起来,统一在同一个系统工作,此时就要用到matlab和vs混合编程. 在matlab中将.m文件编译生成库文件等供外部 ...
- matlab和c++混合编程---matlab和vs的环境配置问题及方法和步骤(转载)
matlab和c++混合编程---方法和步骤 matlab和c++混合编程---matlab和vs的环境配置问题 摘要:Matlab具有很强的数值计算和分析等能力,而C/C++是目前最为流行的高级程序 ...
随机推荐
- AndroidManifest.xml警告
新建一个android项目后,AndroidManifest.xml有一个黄色警告 作为一个新手,不知道这个警告来自哪里,点击界面下方的不同标签,才知道来自图中的位置 第8行中,application ...
- bzoj3262 陌上花开 cdq分治(入门)
题目传送门 思路:cdq分治处理偏序关系的模板题,主要就是学cdq分治吧,还在入门中. 代码其实也很好理解,记得树状数组操作的上限是 z的最大值,不是n的最大值,这个细节wa了好久. #include ...
- URAL - 1297 后缀数组的做法 LCP应用
题意:求最长回文子串 这种有专门的O(n)套板子算法,但作为练习还是用后缀数组来解吧 只需把相同的另一个串反接(中间用一个足够小且未出现的字符衔接),然后枚举回文串的中点,不断求解该点往前和往后计算的 ...
- [转] PuTTY + Xming 远程使用 Linux GUI
[From] http://www.zw1840.com/blog/zw1840/2008/10/putty-xming-linux-gui.html By zw1840 on October 28, ...
- my32_ error 1872 Slave failed to initialize relay log info structure from the repository
重启了实例后,slave进程无法开启 Last_SQL_Errno: Last_SQL_Error: Slave failed to initialize relay log info structu ...
- 小程序 开发阶段请求网络报 不在以下 request 合法域名列表中
1.在工具栏右边,点开详情, 把图片最后一项选上,再重新编译一下项目就可以了. 2.管理员将需要使用的域名添加到小程序后台 1. 地址:http://mp.weixin.qq.com (需要请求的域名 ...
- [转]NetCat简介
NetCat是一个非常简单的Unix工具,可以读.写TCP或UDP网络连接(network connection).它被设计成一个可靠的后端(back-end) 工具,能被其它的程序或脚本直接地或容易 ...
- 请求网络图片缓存到本地 ,还有一些现成的图片加载框架的使用 Ace网络篇(一)
现在去买年货~~~~~~ 占坑, 现在来填坑 填完睡觉,感谢这俩月的把自己往死里逼得奋斗从JAVA什么都不懂到现在,做这些也是给在自学路上的新人(我也是菜鸟)一点点我力所能及的帮助,等我水平更高了还会 ...
- unity 热更新方案ILRuntime
https://github.com/meta-42/ILRuntime 教程 https://ourpalm.github.io/ILRuntime/public/v1/guide/index.ht ...
- arcgis影像批量裁剪代码
# -*- coding:utf-8 -*- # Name: ExtractByMask_Ex_02.py # Description: Extracts the cells of a raster ...