在VS中调试C的mex文件
vs2019 函数调用关系
vs2019 函数调用关系Visual Studio 2019(VS2019)是Microsoft的集成开发环境,用于开发各种应用程序,包括桌面应用程序、Web应用程序、移动应用程序等。
在VS2019中,您可以使用一些工具来查看函数调用关系。
以下是一些主要的工具和步骤:1. 代码浏览器:•打开您的源代码文件。
•在代码编辑器窗口的左侧或右侧,您可以看到一个名为“代码浏览器”的窗口。
如果没有显示,可以在 "View" 菜单下的 "Other Windows" 中找到。
•在代码浏览器中,您可以看到当前文件中的所有函数和它们的调用关系。
2. 调用层次窗口:•在 Visual Studio 中,可以使用“调用层次”窗口来查看函数的调用关系。
•将光标放在您感兴趣的函数名上,然后右键单击,选择"Go To" > "调用层次"。
•这将打开 "调用层次" 窗口,显示函数的调用关系图。
3. 代码地图:•使用代码地图可以可视化代码的结构和调用关系。
•在代码编辑器中,右键单击函数名,然后选择 "查看" > "代码地图"。
•这将在右侧打开一个侧边栏,显示函数调用图。
4. 调试器:•使用内置调试器可以在调试会话中查看函数的调用关系。
•设置断点并启动调试器,然后逐步执行代码,观察调试器的调用栈窗口,以了解函数是如何被调用的。
这些工具可以根据您的需求和编码习惯提供不同的方式来查看函数调用关系。
请根据您的具体情况选择最合适的工具。
VS2010 环境下实现 C程序调用由 C 源代码编译得到的 DLL 文件
printf("max(%d, %d) = %d\n", a, b, fmax(a, b)); } } FreeLibrary(hLib);
return 0; }
注意以上源代码第 4 行中的标识符 __cdecl 开头是连续两个下划线。 输入源代码后的窗口如图 2.5 所示。然后按 Ctrl+Shift+S 组合键保存所有文件。
7
图 2.3 新建源文件 UseMax.c
图 2.4 空白的源代码编辑器窗口 4. 接上步,在源代码编辑器中输入以下源代码: #include<windows.h> #include<stdio.h> typedef int (__cdecl *FuncPtr)(int a, int b); int main(void) { FuncPtr fmax; HINSTANCE hLib; int a = 3, b = 4;
建项目”对话框中左侧选取“已安装的模板”——“其他语言”——“Visual C++” ——“Win32”,在中间区域点击“Win32 项目”,然后在名称栏中输入 max,并选 择合适的目录保存该项目的有关文件,如图 1.1 所示。然后取消勾选右下角的复选 框“为解决方案创建目录”,最后点击“确定”。
参考资料
1. VS2010 文档——Using Dynamic-Link Libraries
11
图 2.7 成功生成 Release 版的 UseMax.exe 文件 根据图 2.7 中的“输出”窗口的提示可知,已经在路径 D:\_Data\CMP\Lng\CLng\Programs\_CProject\UseMax\Release 下生成了程序 UseMax.exe。 7. 接上步,按 Ctrl+F5 组合键(或点击“调试”菜单下的“开始执行(不调试)”命令),
[WENG] 在Visual Studio中开发mex文件,生成mexw64,mexw32
void mexFunction(int nlhs,mxArray *plhs[],int nrhs,const mxArray *prhs[]) {
int nlhs1,nrhs1; mxArray *plhs1[1],*prhs1[1]; mxArray *array_ptr;
nlhs1=1; nrhs1=1;
此次文档更新时使用的开发环境为:Visual Studio 2012, Matlab R2015a
2、 步骤
1.启动 VS,新建一个空的项目 ATSRID。然后配置项目属性信息。然后,新建一个.cpp 文件 atsrid.cpp。 并在添加 Preprocessor Definitions 中添加 MATLAB_MEX_FILE 的宏定义。
在 Visual Studio 中开发 mex 文件,生成 mexw64/mexw32
-9-22 1712
通过使用 C/C++与 Matlab 混合编程,既可以享受到 C 代码快速执行的速度,又可以方便的使用 Matlab 众 多的库函数和强大的绘图功能。让 Matlab 调用 C 函数是通过 DLL 文件实现的,而这个 DLL 的开发过程不 仅仅可以使用 Matlab 自带的 mex 命令,还可以使用 VC++开发环境,使用 VC 有很多好处,一是让我回到了 原来熟悉的开发环境中,二能够使用更加标准的 C++编译器,第三点也是最爽的,可以使用 VC 强大的调试 功能。
E:\Program Files\MATLAB\R2015a\extern\lib\win64\microsoft 连接器中添加静态链接库文件
libmx.lib;libmat.lib;libmex.lib;
VS2015使用教程(使用VS2015编写C语言程序)
VS2015使用教程(使用VS2015编写C语言程序)1) 创建项目(Project)在VS2015 下开发程序首先要创建项目,不同类型的程序对应不同类型的项目,初学者应该从控制台程序学起。
打开VS2015,在上方菜单栏中选择“文件--> 新建--> 项目”:选择“Win32控制台应用程序”,填写好项目名称,选择好存储路径,点击“确定”按钮即可。
如果你安装的是英文版的VS2015,那么对应的项目类型是“Win32 Console Application”。
另外还要注意,项目名称和存储路径最好不要包含中文。
点击“确定”按钮后会弹出向导对话框:点击“下一步”按钮,弹出新的对话框:先取消“预编译头”和“安全开发生命周期检查”这两个选项,再勾选“空项目”,然后点击“完成”按钮就创建了一个新的项目。
感兴趣的读者可以打开E 盘,会发现多了一个cDemo文件夹,这就是整个项目所在的文件夹。
2) 添加源文件在“源文件”处右击鼠标,在弹出菜单中选择“添加-> 新建项”,如下图所示:在“代码”分类中选择C++文件(.cpp),填写文件名,点击“添加”按钮就添加了一个新的源文件。
小小的提示:C++是在C语言的基础上进行的扩展,C++已经包含了C语言的所有内容,所以大部分的IDE 只有创建C++文件的选项,没有创建C语言文件的选项。
但是这3) 编写代码并生成程序打开hello.c,将本节开头的代码输入到hello.c 中,上图是输入完成以后的效果。
注意:虽然可以将整段代码复制到编辑器,但是我还是强烈建议你手动输入,我敢保证你第一次输入代码会有各种各样的错误,只有把这些错误都纠正了,你才会进步。
本教程后续章节还会给出很多示例代码,这些代码一定要手动输入,不要复制后运行成功了就万事大吉。
编译(Compile)在上方菜单栏中选择“生成--> 编译”,就完成了hello.c 源文件的编译工作。
如果代码没有错误,会在下方的“输出窗口”中看到编译成功的提示:编译完成后,打开项目目录(本教程中是E:\cDemo\)下的Debug 文件夹,会看到一链接(Link)在菜单栏中选择“项目--> 仅用于项目--> 仅链接cDemo”,就完成了hello.obj 的链接工作,如下图所示:如果代码没有错误,会在下方的“输出窗口”中看到链接成功的提示:本项目中只有一个目标文件,链接的作用是将hello.obj 和系统组件(专业讲是静态链接库)结合起来,形成可执行文件。
VS2015联合matlab2016b生成mexw64文件
Vs2015联合matlab2016b生成.mexw64文件2017.12最近要用C-mex文件,搜索了好几天在网上没有发现有用的资料,要么资料太旧,使用不了,最终在matlab帮助文档和国外的网站论坛上求助最终后成功。
在此要特别强调,遇到问题的第一件事是去查帮助文档,而不是search。
耐下心去看英文文档,真正高深的有用的基本上在帮助文档里面都有解释。
实在解决不了的去论坛上提问,高手还是很多的。
最后程序也可以在Codeblocks上运行生成,感谢外国友人的帮助,有时间的话会写一篇关于Codeblocks上运行生成mexw64文件的文章。
有想知道了解的可以私信我。
一、Matlab和IDE混合编程的方法有以下几种:1、matlab调用由IDE编译出来的mex文件(相当于动态链接文件,这一点相当重要,不要使用生成控制台程序,这一点一错,后面都不用看了),老版本的mex文件后缀是.dll,新版本的mex文件后缀是.mexw32/64(根据版本生成)。
2、IDE通过engine调用matlab文件。
以上两种方法matlab帮助文档写的都包括,这种只详细讲第一种方法。
二、使用的平台是matlab2016b 64位和VS2015社区版。
(把下面所述的项目,C文件名称全部改为arrayProduct)1、新建一个项目,选择win32/win32项目(可用于创建DLL和静态库项目),不是选择的win32控制台应用程度。
下面输入位置名称等,下一步选择程度类型为DLL,设置一个空项目2、然后生成解决方案如图所示在源文件里面添加一个C文件,或者已有的C文件。
因为matlab是64位,所以调试工具也要选择X643、在源文件里面新建一个模块定义文件.def,文件的名称与项目,C文件名称一致。
添加内容如下4、设置项目属性:1、平台是X64,在配置属性里面的目标扩展名更改为:.mexw642、在C/C++常规项里的附加包含目录是设定:C:\Program Files\MATLAB\R2016b\extern\include这个里面包含的应该是VS所需要调用的matlab的头文件。
c-ceres vs2017 编译
c-ceres是一个用于求解非线性最小二乘问题的开源库,对于VS2017编译c-ceres可能会遇到一些问题。
下面将从几个方面详细介绍如何在VS2017中编译c-ceres。
一、安装VS2017要在电脑上安装Visual Studio 2017。
可以在冠方全球信息站上下载安装程序,按照提示进行安装。
二、下载c-ceres源码在编译c-ceres之前,需要先从冠方仓库或者GitHub上下载c-ceres 的源代码。
可以选择下载zip文件或者使用git clone命令获取源码。
三、配置环境1. 安装CMakeC-ceres的编译过程需要使用CMake进行配置和生成项目文件。
首先需要在电脑上安装CMake,并将其添加到系统环境变量中。
2. 安装EigenC-ceres库依赖于Eigen库,需要先在电脑上安装Eigen并配置其路径,以便在编译c-ceres时能够正确信息Eigen库。
3. 安装SuiteSparse如果c-ceres需要使用SuiteSparse,也需要先在电脑上安装SuiteSparse,并配置其路径。
四、使用CMake配置项目使用CMake打开c-ceres源码目录,并在界面上选择合适的编译器和生成的项目类型。
五、生成项目文件在CMake界面上点击“Generate”按钮,生成项目文件。
六、打开VS2017编译项目使用VS2017打开CMake生成的项目文件,并进行编译。
在编译过程中可能会遇到一些错误和警告,需要根据具体情况进行调试和解决。
七、调试和解决问题根据编译过程中出现的错误信息和警告信息,检查代码和配置,进行调试和解决问题。
八、运行测试编译成功后,可以运行c-ceres的测试用例,验证编译结果的正确性和稳定性。
总结:在VS2017中编译c-ceres需要先安装VS2017、CMake和相关依赖库,并进行配置和生成项目文件。
在编译过程中可能会遇到一些问题,需要进行调试和解决。
最后可以通过运行测试用例来验证编译结果的正确性。
vs2010解决方案配置
vs2010解决方案配置
《VS2010解决方案配置》
在使用Visual Studio 2010进行开发时,配置解决方案是非常重要的一步。
解决方案配置包括对项目的设置、调试选项、编译选项等内容进行配置,确保项目可以正常运行并且满足开发需求。
首先,在Visual Studio 2010中打开解决方案后,我们可以在“解决方案资源管理器”中右键点击解决方案,选择“属性”来对解决方案进行配置。
在弹出的窗口中,我们可以设置不同项目的属性,包括调试、编译、链接、部署等选项。
在调试选项中,我们可以配置启动项目、启动动作、命令行参数、工作目录等内容。
这些设置可以帮助我们在调试时更方便地运行程序并查看运行结果。
在编译选项中,我们可以配置输出路径、生成XML文档、优化选项等内容。
根据项目的具体需求,我们可以对编译选项进行不同的配置,以满足项目的性能和可维护性要求。
另外,在“属性管理器”中,我们还可以对解决方案进行更细致的管理,包括添加不同的配置(Debug、Release等)以及针对不同的平台(x86、x64等)进行配置。
总之,对解决方案进行正确配置是项目开发的重要一步,可以帮助我们更高效地开发和调试代码。
在使用Visual Studio 2010
进行开发时,我们要熟练掌握解决方案配置的方法,以便更好地完成项目开发任务。
在VS2005上编写、运行、调试C语言程序
在VS2005上编写、运行、调试C语言程序目录前言:关于C/C++编译器的简单介绍.............................- 2 - 1.编辑、编译与运行.........................................- 3 - 2.调试技术.................................................- 8 - 设置断点.................................................- 9 - 调试运行.................................................- 9 - 快速监视................................................- 10 - 3.小结....................................................- 13 - 附:VS2005快捷键大全期.....................................- 13 -前言:关于C/C++编译器的简单介绍Turbo C 2.0发布于1989年,对历史并不太长而发展却神速的IT业来说,确实是古董级的软件了。
但它几乎是最后一个专门为C语言设计的开发环境,具备学习C语言的一切条件,没有任何非C语言的东西干扰初学者,所以一直被各大高校的C语言课堂采用。
C++的发展使C++的开发环境大行其道。
因为C++几乎完全兼容C语言,两者无论编译器还是编辑器、调试器都可以用同一套程序实现,而且C++共享C的库函数,很多软件还是用两者混合编程实现,所以基本所有的C++环境都同时支持C语言。
Dev-c++是Windows平台下C++ IDE开发环境,属于共享软件。
界面亲切优雅,size也不大,其后续版有中文语言支持,无需汉化。
mex文件及其编译
mex文件及其编译1. MEX的编写格式写MEX程序其实就是写一个DLL程序,所以你可以使用C,C++,Fortran等多种编程语言来写。
编写MEX程序的编辑器可以使用MA TLAB的代码编辑器,也可使用自己的C++编辑器,如VS2008等。
用MA TLAB的编辑器的好处是,MEX函数会加粗高亮显示,这给程序编写带来便利,可惜无法动态调试。
如用VC即可编译也可调试,比较方便。
mex的编译结果实际上就是一个带输出函数mexFunction 的dll文件,所以会用VC编写和调试dll,就会用VC编写和调试MEX程序。
a. MEX文件格式(metFuction函数)#include "mex.h"void mexFunction( int nlhs, mxArray *plhs[],int nrhs, const mxArray *prhs[] ){}四个参数分别用来输出和输入数据: nlhs 输出参数个数,plhs 输出参数指针(nrhs和prhs是输入参数相关的)。
注意: 我们对输出和输入参数的操作都是通过指针的方式进行的。
mexFunction的四个参数皆是说明Matlab调用MEX文件时的具体信息,如这样调用函数时:>> b = 1.1; c = 2.2;>> a = add(b, c)mexFunction四个参数的意思为:nlhs = 1,说明调用语句左手面(lhs-left hand side)有一个变量,即a。
nrhs = 2,说明调用语句右手面(rhs-right hand side)有两个自变量,即b和c。
plhs是一个数组,其内容为指针,该指针指向数据类型mxArray。
因为现在左手面只有一个变量,即该数组只有一个指针,plhs[0]指向的结果会赋值给a。
prhs和plhs类似,因为右手面有两个自变量,即该数组有两个指针,prhs[0]指向了b,prhs[1]指向了c。
MSComm控件使用VisualStudio2010
(2)“关闭串口”按钮,添加方法为从右侧“工具箱”拖放一个“Button”到对话框,并在右侧“属性”卡中修改“Caption”为“关闭串口”,修改“ID”为“IDC_BUTTON_CLOSE”。
}
m_mscomm.put_CommPort(1); //选择COM1
m_mscomm.put_InBufferSize(1024); //接收缓冲区
m_mscomm.put_OutBufferSize(1024);//发送缓冲区
m_mscomm.put_InputLen(0);//设置当前接收区数据长度为0,表示全部读取
}
void CCommTestDlg::OnBnClickedButtonSixteen()
{
// TODO:在此添加控件通知处理程序代码
}
消息映射已经自动关联。
8.
1在控件(电话图标)上“右键”——>添加事件处理程序
2点击“添加编辑”
在CommTestDlg.cpp文件中会增加函数:
BEGIN_EVENTSINK_MAP(CCommTestDlg, CDialogEx)
{
// TODO:在此添加控件通知处理程序代码
UpdateData(true); //读取编辑框内容
m_mscomm.put_Output(COleVariant(m_EditSend));//发送数据
m_EditSend.Empty(); //发送后清空输入框
UpdateData(false); //更新编辑框内容
vs的命令参数
vs的命令参数
在Visual Studio(VS)中,向命令行添加参数的方法如下:
1. 在终端中直接添加相关参数,用空格隔开。
2. 在VS中,右键单击要添加参数的工程,选择“属性”,然后选择“配置属性”,在右侧的“调试”选项卡中,找到“命令参数”栏,在此输入要添加的参数,各参数间同样用空格隔开。
另外,在C++程序中,main函数的参数包括:
1. argc:argument count的缩写,表示传入main函数的参数个数。
2. argv:argument vector的缩写,表示传入main函数的参数序列或指针。
第一个参数argv[0]是程序的名称,并且包含了程序所在的完整路径。
以上信息仅供参考,如果遇到问题,建议咨询编程专业人士或者查阅相关编程书籍。
matlab mex反编译
matlab mex反编译
MATLAB MEX文件是一种由C/C++语言编写的程序,它可以作为MATLAB的扩展功能,以加速一些特定的计算任务。
然而,有时候我们可能会遇到需要反编译MEX文件的情况,以便了解其内部实现或者重新编写自己的版本。
反编译MEX文件并不是一项简单的任务,需要具备一定的编程知识和技能。
下面是一些大致的步骤:
1. 下载并安装MATLAB编译器和Visual Studio C++(或其他支持的编译器)。
2. 打开MATLAB,输入命令“mex -setup”,按照提示配置编译器。
3. 打开MEX文件所在的文件夹,找到“mex.bat”文件,双击运行。
4. 在Visual Studio C++中打开生成的.sln文件,查看和修改代码。
5. 修改完成后,保存并关闭Visual Studio C++。
6. 在MATLAB中输入命令“mex filename.c”,编译修改后的代码。
7. 如果编译成功,将生成一个新的MEX文件,可以在MATLAB中使用。
需要注意的是,反编译MEX文件可能会涉及到版权和法律问题,因此在进行反编译之前,请确保你有合法的权限和充分的理由。
此外,由于MEX文件是由C/C++语言编写而成,需要具备一定的编程技能和经验,否则修改可能会带来不可预料的结果。
VS编译C语言方法(工程的建立
VS编译C语言方法(工程的建立)大家在学习C语言的时候接触的一般都是VC6.0。
但是VC6.0只能编译C或者C++,不支持C#,集成度不是很高。
而且界面并不十分友好,不能自动猜测关键字,函数的参数也不能自动标示。
最关键的是,编译的时候纠错信息是全英文的,对于初学者十分不方便。
在演示编译一些简单的C程序时VC6.0可以胜任,但是在进行稍微复杂的程序编辑工作时,VC6.0就有点力不从心了。
现在微软的基于.NET的开发软件已经更新至Visual Studio 2010(VS2010)但是VS2010版本还不是最完善,所以目前为止,最流行的还是Visual Studio 2008(内部代号VC9.0,以下简称VS2008)。
大家接触VS2008一般都是从C#或者VB语言开始的,其实VS2008作为一款集成度很高的编译软件,其本身也是支持C语言的。
大家可以用它来进行C语言的编译。
相较于VC6.0,VS2008更加的智能,更加人性化。
而且VS2008还支持windows7(VC6.0不支持),所以很多装了windows7的朋友就不用头疼了。
下面,就向大家啊演示如何使用VS2008编译C程序,本文中使用VS2008 professional版本。
1.打开VS2008,这就不用多说了吧2.打开了VS2008的主界面,然后选择,文件→新建→项目弹出如图对话框在项目类型中选择VC++→win32 然后在右侧模板中选择win32控制台应用程序,再在下面输入一个名称(项目名称,不用带.C)选择保存位置后确定好了,弹出个对话框,不管它,下一步接下来注意了,这个对话框中,应用程序类型要选择控制台应用程序,附加选项一定要选中“空项目”。
然后点完成。
然后对话框消失,回到VS主界面,这时会在左侧和右侧多了如图工具栏“解决方案管理器”,如果没有,请点击快捷键(最左边)在源文件上点右键,选择“添加→新建项”。
这里注意,如果你已经有写好的C源文件,那么要选择“现有项”又打开个对话框,不管左边的,在右边的模板中选择C++文件(注一),在下面的名称中输入源文件的名字加上.C(注二),保存位置用默认的。
Matlab Mex文件调试
8Q:如何调试C MEX S-Functions:(Microsoft Visual C/C++ .NET)
8A:
1、 mex –setup选择编译器 Visual C/C++ .NET。
2、 mex –g ***.c编译mex文,此命令产生***.mexw32文件。
3、打开microsoft开发环境,不退出matlab。
4、 VC中,选择tools-->debug Process;选择matlab.exe并attach;在打开的对话框中选择Native,点
击Ok。
5、通过File——> open ——> ***.c打开源文件。
6、在合适之处设置断点。
参考文献:网页Support - How Do I Debug C MEX S-Functions.htm
注意事项:
1、每一次改动完mex文件后,应该终止调试,重新编译,才能真正保存改动,以新的文件进行调试运行。
2、 mex中对于输入的矩阵元素值按列索取。
3、 mex文件中的所有的变量声明需在所有执行语句之前。
4、已进入调试状态下,进行mex –g/-v ***.c编译会出错,应该注释掉。
vs2019编译c程序
vs2019编译c程序
在Visual Studio 2019中编译C程序,你可以按照以下步骤进
行操作:
1. 打开Visual Studio 2019,选择“创建新项目”。
2. 在“创建新项目”对话框中,选择“Visual C++”下的“空
项目”模板,并为项目命名。
3. 单击“确定”按钮创建新项目。
4. 在“解决方案资源管理器”中,右键单击“源文件”文件夹,选择“添加” > “新建项”。
5. 在“添加新项”对话框中,选择“C++文件(.cpp)”作为项
类型,并为文件命名,然后单击“添加”按钮。
6. 编写你的C程序代码。
7. 在代码编辑器中,单击“生成”菜单,选择“生成解决方案”
或者按下快捷键Ctrl+Shift+B来编译你的程序。
8. 如果编译成功,你将在输出窗口中看到“生成成功”或类似的消息。
如果有错误,它们将在输出窗口中显示,并且代码编辑器中也会有相应的提示。
另外,你也可以使用命令行工具来编译C程序。
在Visual Studio 2019中,可以使用Developer Command Prompt来执行编译操作。
打开Developer Command Prompt,导航到你的项目目录,然后使用合适的编译命令(如cl)来编译你的C程序。
总之,使用Visual Studio 2019编译C程序可以通过集成开发环境或者命令行工具来完成,具体操作取决于你的个人偏好和项目需求。
希望这些信息能够帮助到你顺利编译C程序。
VC++6.0环境下调试c语言代码的方法和步骤
VC++6.0环境下调试c语言代码的方法和步骤下文将为大家带来VC++6.0环境下调试c语言代码的方法和步骤,欢迎参考学习!更多内容请关注店铺!1.C语言程序四步开发步骤(1)编辑。
可以用任何一种编辑软件将在纸上编写好的C语言程序输入计算机,并将C语言源程序文件*.c以纯文本文件形式保存在计算机的磁盘上(不能设置字体、字号等)。
(2)编译。
编译过程使用C语言编译程序将编辑好的源程序文件“*.c”,翻译成二进制目标代码文件“*.obj”。
编译程序对源程序逐句检查语法错误发现错误后,不仅会显示错误的位置(行号),还会告知错误类型信息。
我们需要再次回到编辑软件修改源程序的错误,然后,再进行编译,直至排除所有语法和语义错误。
(3)连接。
程序编译后产生的目标文件是可重定位的程序模块,不能直接运行。
连接将编译生成的各个目标程序模块和系统或第三方提供的库函数“*.lib”连接在一起,生成可以脱离开发环境、直接在操作系统下运行的可执行文件“*.exe”。
(4)运行程序。
如果经过测试,运行可执行文件达到预期设计目的,这个C语言程序的开发工作便到此完成了。
如果运行出错,这说明程序处理的逻辑存在问题,需要再次回到编辑环境针对程序出现的逻辑错误进一步检查、修改源程序,重复编辑→编译→连接→运行的过程,直到取得预期结果为止。
2.Visual C++ 6.0 开发环境介绍Visual C++ 6.0(以后简称 VC)是 Microsoft 公司推出的可视化开发环境Developer Studio 下的一个组件,为我们提供了一个集程序创建、编辑、编译、调试等诸多工作于一体的集成开发环境(IDE)。
VC 集成开发环境功能强大,不仅提供了大量的向导(Wizard ),还有完备的帮助功能(MSDN)。
所以,初学者学习C 语言编程,并不需要全面了解开发环境的全部功能。
我们可以在安装VC时选择完全安装MSDN,然后在遇到问题时再去查阅MSDN 中的相关说明。
C-MEX函数
//IDu(pnew)=[];
nu--; } else
nu=0; } }
/*下面这个mexFunction的目的是使MATLAB知道如何调用这个函数*/ void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] ) { if(nrhs!=3)
p--; IDp[0]=p;
for (i=0;i<n;i++) {
w[i]=D[n*i+p]; if ( i<p )
/blog/static/869642200971562433216/
2010/11/30
w
页码,3/4(W)
IDu[i]=i; else
首页推荐 洗澡时发现婆婆是双性恋 毛利:烂人完美标本 美国人忙着捡便宜 兽兽亮相车展遭围攻 游资为什么炒作农产品? 为何有些物种要变性
更多>>
mrows = mxGetM(prhs[0]); /* 获得输入矩阵的行数 */ ncols = mxGetN(prhs[0]); /* 获得输入矩阵的列数 */ if( !mxIsDouble(prhs[0]) || mxIsComplex(prhs[0]) || !(mrows==1 && ncols==1) )
mexErrMsgTxt("Input must be a noncomplex scalar double."); /* 判断输入矩阵是否是double类,以及它是否只包括单个元 素 */
/* 为输出创建一个矩阵,显然这个矩阵也应该是1x1的 */ plhs[0] = mxCreateDoubleMatrix(mrows,ntPr(prhs[0]); /* 获得指向输入/输出矩阵数据的指针 */ y = mxGetPr(plhs[0]);
matalb中mex文件调试
matalb中mex文件调试Matlab 中MEX 文件调试方法总结首先解释下mex文件的由来,mex是matlab提供的与外部语言如C、C++、Fortran提供的接口函数,称之为mex function。
所以我们用上诉语言编写的源文件叫mex function,把这些文件经过build 就可以生成mex 文件,mex 文件在matlab中执行。
有关matlab中mex的用法,可以见help,搜索mex即可。
MEX function有一套自己的编写规则,主要是和matlab的接口问题,本质上是参数传递问题,学习这个,最好找个别人做好的工程例子,参考模仿。
另外mex function经过build 生成mex file,以及mex file的属性帮助里面也有详细解释。
此篇重点讲解debug问题,m文件可以在matlab环境下调试,由于mex文件是经过build 生成的,无法直接调试,所以要借助相应语言的开发环境进行调试,这很简单,只需要把mex function文件在matlab环境下编译的时候加上debug选项即可,例如我们编译一个名字为example.c 的mex function文件,可以在matlab的command窗口输入命令“mex –g example.c”即可。
本篇暂只讲解windows环境的调试方法,另外以C语言mex function作为例子,并假设开发环境已经配置好,编译器为VC(各种可行版本)。
下面我们介绍根据mex 文件的类型来决定我们的调试方法,如果照上述编译方法生成的是example.dll,假设其绝对路径为E盘下的project文件夹,我们只要在windows的命令窗口输入msdev E:\project example.dll系统会自动启动VC,选择project菜单下的Setting子菜单打开对话框如下图所示:选择上图界面,在Executable for debug session编辑框内,点击选择matlab可执行文件(自己根据matlab安装路径查找),然后点击OK即可。
VS 中C++或C#应用程序设置运行时自动获取管理员权限
VS中C# 应用程序设置运行时自动获取管理员权限
在项目中使用管理员账户权限的功能,在编译时就设置好,发布时无需再进行手动设置获取管理员权限。
具体步骤如下所述。
第一步,打开启动的项目属性,选择安全性设置,勾选ClickOnce设置,为避免权限滥用,选择自定义权限,如下图:
第二步,保存项目设置,在解决方案中展开项目properties选项找到app.manifest文件
第三步,编辑app.manifest文件,如下图:
更改level 为“requireAdministrator”,设置uiAccess为false,保存编译、运行,程序运行后自动已管理员身份运行,并且不显示请求权限的提示窗口。
第四步,注意,如果设置了“requireAdministrator”,保存后需要取消勾选ClickOnce,否则会无法编译,出现以下错误:ClickOnce 不支持请求执行级别“requireAdministrator”。
4.VS中C++应用程序设置运行时自动获取管理员权限工程右键属性 具体如图:。
vs文件操作函数
在Visual Studio (VS) 中,您可能会遇到一些文件操作函数,这些函数用于读取和写入文件。
以下是一些常用的文件操作函数:fopen:此函数用于打开一个文件。
它需要两个参数:一个字符串,该字符串表示文件的路径和名称,以及一个模式字符串,该字符串指定您打算如何使用该文件。
例如:FILE *fopen(const char *path, const char *mode);fread:此函数用于从文件中读取数据。
它需要四个参数:一个指向要存储读取数据的内存位置的指针,要读取的元素大小,要读取的元素数量,以及一个指向打开文件的指针。
例如:size_t fread(void *ptr, size_t size, size_t count, FILE *stream);fwrite:此函数用于将数据写入文件。
它需要四个参数:一个指向要写入的数据的指针,要写入的元素大小,要写入的元素数量,以及一个指向打开文件的指针。
例如:size_t fwrite(const void *ptr, size_t size, size_t count, FILE *stream);fclose:此函数用于关闭已打开的文件。
它需要一个参数:一个指向打开文件的指针。
例如:int fclose(FILE *stream);fseek:此函数用于移动文件的读/写指针到指定的位置。
它需要三个参数:一个指向打开文件的指针,偏移量,以及起始位置。
例如:int fseek(FILE *stream, long offset, int whence);ftell:此函数用于返回当前文件读/写指针的位置。
它需要一个参数:一个指向打开文件的指针。
例如:long ftell(FILE *stream);。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在Visual Studio中调试C/C++ mexFunction文件
C/C++ MEX文件:也称为MEX源码文件,就是就是普通的fortran/C/C++文件,只是其中定义了一个mexFunction的接口,用于和MATLAB通讯,使用mex()函数可以将其编译为MATLAB MEX文件。
至于如何书写mex源码文件,您可以看下MATLAB的帮助文档!
MATLAB MEX文件:也称为MEX二进制文件,是一种动态链接库,可以在MATLAB像普通函数一样直接调用或运行,windows平台下的扩展名为mexw32或者mexw64。
使用mex()可以将MEX源码文件编译成mexw32,使用Coder工具箱可以将M文件编程mexw32。
mex()函数:MATLAB自带函数,用来将MEX源码文件编译成MEX二进制文件。
MEX函数库:在MEX源码文件中调用的MATLAB函数,主要进行和MATLAB的一些交流。
MX矩阵库:MATLAB为C/C++等提供了一些矩阵操作的库函数。
1
很多人都知道,使用mex()函数将C/C++源码文件编译成可以在MATLAB中直接运行的二进制mex文件。
但是没有注意到还可以对生成的mex文件在Visual Studio进行调试!
Windows平台上调试
在Visual Studio 2005/2010平台上就可以调试C/C++源码MEX文件,楼主是用的是Visual Studio 2010,下面进行图解说明
(1)选择Visual C++ 2010作为默认编译器,在MATLAB命令行输入:>> mex -setup 2
3Welcome to mex -setup. This utility will help you set up
4 a default compiler. For a list of supported compilers, see
5/support/compilers/R2012a/win32.html
复制代码
6(2)直接回车,MATLAB自动搜索系统中编译器。
Please choose your compiler for building
MEX-files:
7
8Would you like mex to locate installed compilers [y]/n?
9
10Select a compiler:
11[1] Intel Visual Fortran 12.0 (with Microsoft Visual C++ 2010 linker) in C:\Program
Files\Intel\ComposerXE-2011\
12[2] Lcc-win32 C 2.4.1 in D:\Program\MATLAB\R2012a\sys\lcc
13[3] Microsoft Visual C++ 2010 in D:\Program\Visual Studio
14
15[0] None
复制代码
16(3)楼主系统中安装两个编译器,其中Intel Visual Fortran是Fortran编译器,Visual C++ 2010是C/C++编译器。
而LCC-Win32是MATLAB自带的C编译器(只能编译C,不能编译C++),不是楼主安装的。
输入3,回车表示选择Visual C++ 2010作为C/C++默认编译器。
Compiler: 3
17
18Please verify your choices:
19
20Compiler: Microsoft Visual C++ 2010
21Location: D:\Program\Visual Studio
复制代码
22(4)直接回车,确定并完成您的配置。
Are these correct [y]/n?
23
24***************************************************************************
25Warning: MEX-files generated using Microsoft Visual C++ 2010 require
26that Microsoft Visual Studio 2010 run-time libraries be
27available on the computer they are run on.
28If you plan to redistribute your MEX-files to other MATLAB
29users, be sure that they have the run-time libraries.
30***************************************************************************
31
32
33Trying to update options file: C:\Users\Dynamic\AppData\Roaming\MathWorks\MATLAB\R2012a\mexopts.bat
34From template: D:\Program\MATLAB\R2012a\bin\win32\mexopts\msvc100opts.bat
35
36Done . . .
37
38**************************************************************************
39Warning: The MATLAB C and Fortran API has changed to support MATLAB
40variables with more than 2^32-1 elements. In the near future
41you will be required to update your code to utilize the new
42API. You can find more information about this at:
43/help/techdoc/matlab_external/bsflnue-1.html
44Building with the -largeArrayDims option enables the new API.
45**************************************************************************
复制代码
46(5)使用-g开关编译yprime.c MEX源码文件,用于后面的调试。
mex -g yprime.c 复制代码
47此时当前目录下会生成一个yprime.mexw32文件,楼主的计算机是32位的,如果您是64位的操作系,那将生成一个yprime.mexw64的文件。
(6)启动Visual Studio,注意不要退出MATLAB,否则您会找不到相关进程的。
(7)在Visual Studio中进行菜单操作,Tools→Attach to Process...
(8)在Attach to Process对话框中,选择MATLAB进程,点击“Attach(A)”按钮。
(9)此时VS会自动加载所有相关数据,菜单操作,File→Open→File...选择MATLAB 当前工作目录中的yprime.c文件。
(10)您可以在yprime.c中任意设置断点,一般我们喜欢在mexFunction的开始位置就给一个断点。
(11)在MATLAB中运行MEX二进制文件,比如输入:yprime(1,1:4)
复制代码
(12)程序会自动运行到VS中设置断点的位置,此时我们可以进行任何Visual Studio中的调试工作,比如查内存,看地址,读数据等等。
(13)点击菜单操作,Debug→Contiue,将程序执行完毕,MATLAB命令窗口会显示如下内容:
49>> yprime(1,1:4)
50
51ans =
52
53 2.0000 8.9685 4.0000 -1.0947
复制代码
注意:如果您想将生成的mexw32文件发布给第三方,请重新使用mex()函数进行编译,使用-g开关生成的mexw32文件只能用于调试!。