Compiler_C++混合编程
来源:互联网 发布:java变量命名规则 编辑:程序博客网 时间:2024/06/06 20:43
mbuild -setup
mcc -m fun1.m
针对我的项目:matlab_compiler2.
一.
class_Mfunc.m文件的源码:
function [maxf minf] = class_Mfunc(f1,f2)
t = linspace(0,1,400);
y1 = sin(2*pi*f1*t);
y2 = cos(2*pi*f1*t);
plot(t,y1);
figure %分开画出第二条曲线
plot(t,y2);
maxf = max(f1,f2)
minf = min(f1,f2)
end
>> mbuild –setup
>> mcc -l class_Mfunc.m %-l不是数字1,初学者很容易出错。
二.
1.把编译生成的class_Mfunc.dll , class_Mfunc.lib , class_Mfunc.h拷贝到VS的当前工作目录中。(.lib与.dll文件的区别请参考”DLL和LIB.doc”,要想知道链接库(class_Mfunc.dll , class_Mfunc.lib)的内容,可查看编译生成的class_Mfunc.c文件)。
2.查看class_Mfunc.h
#include"mclmcrrt.h"
externLIB_class_Mfunc_C_API
boolMW_CALL_CONVclass_MfuncInitialize(void);//初始化
externLIB_class_Mfunc_C_API
voidMW_CALL_CONVclass_MfuncTerminate(void);//结束
externLIB_class_Mfunc_C_APIboolMW_CALL_CONVmlfClass_Mfunc(intnargout,mxArray**maxf,mxArray**minf,mxArray*f1,mxArray*f2);//nargout是输出参数的个数,mxArray**maxf,mxArray**minf表示输出参数,mxArray*f1,mxArray*f2表示输入参数
3.由于有#include"mclmcrrt.h",所以需要包含mclmcrrt.h这个头文件的相应路径到当前工作目录中。
a.项目-》属性-》VC++目录-》包含目录(加入mclmcrrt.h头文件路径)
D:\Program Files\MATLAB\R2011b\extern\include
b. 项目-》属性-》VC++目录-》库目录-》(加入mclmcrrt.lib库文件的路径)
D:\Program Files\MATLAB\R2011b\extern\lib\win32\microsoft
C.链接器-》输入-》附加依赖项:输入mclmcrrt.lib;class_Mfunc.lib
*因为class_Mfunc.lib已经拷贝到当前工作的目录中,所以不需要把它的路径包含到“库目录”中,直接在“附加依赖项”中输入class_Mfunc.lib,class_Mfunc.lib对应的头文件也在当前工作目录中,所以也不需要“包含目录”,到时候直接在源文件中引include class_Mfunc.h即可。目录的配置参见MatCom_C++.docx。
三.编程
1.包含头文件#include"class_Mfunc.h"
//#include <mclmcrrt.h>//"class_Mfunc.h"包含了mclmccr.h
2.在XXDlg类中的OnIniDialog()进行库的初始化
BOOL CClass_Compiler2Dlg::OnInitDialog()
{
// TODO: 在此添加额外的初始化代码
//调用matlab动态链接库前,需要先初始化
//表示如果初始化失败了,整个程序应该返回,并弹出消息框。针对mclmcrrt.lib
if (!mclInitializeApplication(NULL,0))
{
MessageBox("Could not initialize the application !");
return FALSE;
}
//在调用编译的动态链接库之前,需要对这个库进行初始化。在头文件中可以查看到这个函数。/如果这个函数调用失败的话,需要弹出消息框,并返回。针对 class_Mfunc.lib
if (!class_MfuncInitialize())
{
MessageBox("Could not initialize the library !");
}
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
3.添加XXDlg类的WM_CLOSE消息响应函数,因为初始化函数与结束函数是成对出项的。
void CClass_Compiler2Dlg::OnClose()
{
class_MfuncInitialize();
mclTerminateApplication();
CDialogEx::OnClose();
}
4.添加按钮点击的函数。
void CClass_Compiler2Dlg::OnBnClickedOk()
{
double fValue1 = 1.0;
double fValue2 = 2.0;
mxArray *f1;
mxArray *f2;
//一定要给*maxf和*minf赋为NULL否则这两个指针会指向同一块内存,引起出错。
mxArray *maxf = NULL;
mxArray *minf = NULL;
//建立一个1*1的矩阵,即只有一个值的矩阵。
f1 = mxCreateDoubleMatrix(1,1,mxREAL);
f2 = mxCreateDoubleMatrix(1,1,mxREAL);
//给f1,f2这两个指针分别指向fValue1和fValue2.
memcpy(mxGetPr(f1),&fValue1,sizeof(double));
memcpy(mxGetPr(f2),&fValue2,sizeof(double));
//调用函数 mlfClass_Mfunc(int nargout, mxArray** maxf, mxArray** minf, mxArray* f1, mxArray* f2);可见mxArray** maxf, mxArray** minf 是两个*的,所以要用取地址符。
mlfClass_Mfunc(2,&maxf,&minf,f1,f2);
//等待用户关闭图形窗口,图形窗口关闭后,函数返回,继续执行下面的语句
mclWaitForFiguresToDie(NULL);
//销毁指针变量
mxDestroyArray(f1);
f1 = NULL;
mxDestroyArray(f2);
f2 = NULL;
mxDestroyArray(maxf);
maxf = NULL;
mxDestroyArray(minf);
minf = NULL;
}
- Compiler_C++混合编程
- 混合编程
- VC&MATLAB混合编程
- c/c++混合编程
- VC++;Matlab;混合编程
- 混合语言编程
- DSP混合编程规则
- C/C++混合编程
- DSP混合编程3
- c# matlab混合编程
- C/C++混合编程
- Linux混合编程+log4cpp
- C 汇编混合编程
- labview 混合编程
- DSP的混合编程
- c++ c#混合编程
- C/C++混合编程
- 混合编程关键词
- 封装json数据 需要导入的jar包
- 使用MATLAB的MCC命令生成C/C++程序
- 查看浏览器内核版本
- 系统下载网址
- Eclipse快捷键 10个最有用的快捷键
- Compiler_C++混合编程
- Classic Shell:找回 Windows 8 / Windows Server 2012 的经典的开始按钮和开始菜单
- initWithFormat 和stringWithFormat的区别
- PowerBuilder通过ODBC和JBDC连接mysql数据库
- C++函数式编程(五)性能影响
- 给对话框添加状态栏
- 裸板开发--makefile 出错问题解决
- Eclipse快捷键大全(转载)
- access数据库中小数点前0没有了