Matlab R2010a和vs 2010混合编程
来源:互联网 发布:怎么在淘宝上买种子 编辑:程序博客网 时间:2024/05/17 00:41
点击打开链接
MatlabR2010a与vs2010 c++混合编程成功,在vs2010 c++中能够调用matlab的m函数,进行计算,得到正确结果,调用matlab中m函数转化成的dll文件
MatlabR2010a与vs2010 c++混合编程成功,在vs2010 c++中能够调用matlab的m函数,进行计算,得到正确结果,调用matlab中m函数转化成的dll文件
一、matlab编译环境的设置
>>mex –setup
Pleasechoose your compiler for building external interface (MEX) files:
Would you like mex to locate installed compilers [y]/n? n
这个地方如果选择y,那么就看不到vs2010 c++的编译器,只能看到C++6.0的(我电脑里装了这两个),我之前写的就是用C++6.0的编译器编译的DLL,再用VS2010可以调用成功的。如果这时候你想选择vs2010 c++的编译器,就要选择n,我想也应该可以的。
>> mbuild –setup
Would you like mex to locate installed compilers [y]/n? n
这个地方如果选择y,那么就看不到vs2010 c++的编译器,只能看到C++6.0的(我电脑里装了这两个),我之前写的就是用C++6.0的编译器编译的DLL,再用VS2010可以调用成功的。如果这时候你想选择vs2010 c++的编译器,就要选择n,我想也应该可以的。
>> mbuild –setup
同上
举例:创建所需的Matlab函数文件 MyAdd.m
function [c] = MyAdd(a, b);
c = a + b;
function [c] = MyAdd(a, b);
c = a + b;
然后,进行编译,命令如下:
mcc -W cpplib:libMyAdd -T link:lib MyAdd.m–C
mcc -W cpplib:libMyAdd -T link:lib MyAdd.m–C
会生成如下文件:
libMyAdd.cpp(这里有函数接口说明)
libMyAdd.dll
libMyAdd.h
libMyAdd.ctf
libMyAdd.lib
这四个是要用到的文件。
vs2010项目目录设置(MFC):libMyAdd.cpp(这里有函数接口说明)
libMyAdd.dll
libMyAdd.h
libMyAdd.ctf
libMyAdd.lib
这四个是要用到的文件。
第一步:添加生成的动态链接库文件
把四个要要用到的文件,复制到vs工程目录下
第二步:选择项目->项目属性。选择C/C++->常规->附加包含目录:D:\Program Files\MATLAB\MATLAB Compiler Runtime\v713\extern\include(选择Matlab R2010a编译器路径,这样可以在没有安装Matlab的机器上运行,但必须安装Matlab的编译器MCR)
把MATLAB提供的include路径添加到VC++的头文件搜路路径。
file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image002.jpg
第三步:连接器->常规->附加库目录:D:\Program Files\MATLAB\MATLABCompiler Runtime\v713\extern\lib\win32\microsoft(选择Matlab R2010a编译器路径,这样可以在没有安装Matlab的机器上运行,但必须安装Matlab的编译器)
添加MATLAB生成的响应的lib所在目录加入。
file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image004.jpg
第四步:连接器->输入->附加依赖项:libMyAdd.lib;mclmcrrt.lib(中间必须是回车分开,回车以后自动生成“;“,不是空格键,也不是手动添加;这个,不然会出现找不到”libMyAdd.lib;mclmcrrt.lib“错误)
file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image006.jpg
设置完成!
代码里要添加头文件即可
#include" libMyAdd.h"
如果编译会有错误:“char16_t”: 重定义;不同的基类型“
只需要在" libMyAdd.h"中添加如下代码即可:
#ifdef _CHAR16T
#define CHAR16_T
#endif
程序代码(仅供参考):
voidCFUNCTIONADDDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
if(!mclInitializeApplication(NULL, 0))
{
MessageBox(_T("could not initializethe application"));
}
if(!addtwoInitialize())
{
MessageBox(_T("could not initialiaeaddtwo"));
}
try
{
mwArray a(2, 2, mxDOUBLE_CLASS);
double *aData;
aData=new double[4];
int i;
for (i=0; i<4; i++)
{
aData=1.0*i;
}
a.SetData(aData, 4);
mwArray b(2, 2, mxDOUBLE_CLASS);
b(1, 1)=11;
b(1, 2)=12;
b(2, 1)=21;
b(2, 2)=22;
mwArray y(2, 2, mxDOUBLE_CLASS);
addtwo(1, y, a, b);
double *yData;
yData=new double[4];
if(yData==NULL)
{
MessageBox(_T("failed toallocate memory for y"));
}
y.GetData(yData, 4);
CString str;
str.Format(_T("%f, %f, %f,%f"), yData[1], yData[2], yData[3], yData[4]);
MessageBox(str);
delete []aData;
delete []yData;
}
catch (const mwException &e)
{
CString str;
str=e.what();
MessageBox(str);
}
addtwoTerminate();
mclTerminateApplication();
}
0 0
- Matlab R2010a和vs 2010混合编程
- Matlab R2010a和vs 2010混合编程
- Matlab R2010a和vs 2010混合编程
- Matlab R2012a和vs 2010混合编程
- MATLAB和VS混合编程
- Matlab 与 vs 混合编程
- matlab 与VS 混合编程
- vs&matlab混合编程-- - mexw64
- MATLAB与VS混合编程
- VS和matlab混合编程的推荐书籍!
- matlab和c++混合编程---matlab和vs的环境配置问题
- Matlab与VS混合编程总结
- VS 调用 Matlab (混合编程)
- Qt(或者VS)+Matlab混合编程
- VS和matlab混合编程——调用matlab计算引擎
- C++和Matlab混合编程——VS调用Matlab函数
- VC++和Matlab混合编程
- Matlab和C混合编程
- JAVA学习总结二十五
- 异步任务之AsyncTask实现<一>
- [Linux/Ubuntu] vi/vim 使用方法讲解
- APP开发实战99-Android的内部存储(Internal Storage)
- Latex生成PDF文件中字体无法嵌入
- Matlab R2010a和vs 2010混合编程
- 【经典算法】: 求链表中倒数第K个结点
- Python 3.5 import easygui invalid syntax
- Java-算法之选择排序
- 腾讯云配置密钥使用putty登录
- poj 1572 kmp
- diff patch 打补丁
- 从零开始学_JavaScript_系列(25)——dojo(10)摧毁一个widget
- 读过不错的电子书籍