本人在做微博缩略图的分类,分成有文字的和没有文字的。。自己在matlab里面写了.m的判断函数,想要从VS2010调用。。下面是实现过程:
环境:
64位机器 ,系统是08R2的。
matlab2011a:
vs2010:
1,MATLAB设置:
1.1安装编译器(红色为输入的命令)
>> mbuild -setup
Welcome to mbuild -setup. This utility will help you set up
a default compiler. For a list of supported compilers, see
http://www.mathworks.com/support/compilers/R2011b/win64.html
Please choose your compiler for building standalone MATLAB applications:
Would you like mbuild to locate installed compilers [y]/n? y
Select a compiler:
[1] Microsoft Visual C++ 2010 in C:\Program Files (x86)\Microsoft Visual Studio 10.0
[0] None
Compiler: 1
Please verify your choices:
Compiler: Microsoft Visual C++ 2010
Location: C:\Program Files (x86)\Microsoft Visual Studio 10.0
Are these correct [y]/n? y
****************************************************************************
Warning: Applications/components generated using Microsoft Visual C++
2010 require that the Microsoft Visual Studio 2010 run-time
libraries be available on the computer used for deployment.
To redistribute your applications/components, be sure that the
deployment machine has these run-time libraries.
****************************************************************************
Trying to update options file: C:\Users\liang.guo\AppData\Roaming\MathWorks\MATLAB\R2011b\compopts.bat
From template: C:\PROGRA~1\MATLAB\R2011b\bin\win64\mbuildopts\msvc100compp.bat
Done . . .
>>
1.2生成dll文件
编辑m文件,这里是我自己写的检测图片中是否有文字的M文件:
//根据K的值判断图片中是否有文字,这里就不全写了。。
function k=YesorNo(name)
imgtemp=imread(name);%
.......
...有点长就不写了......
k = value;
///
在MATLAB命令框中输入以下命令:
>> mcc -W cpplib:ppp -T link:lib YesorNo.m %% ppp是想要生成的dll等文件的名字。。。
生成ppp.lib, ppp.h, ppp.dll 等文件
2 VS设置
新建一个win32 控制台应用程序,添加上面的三个文件到所建的工程
2.1,首先配置项目属性页/配置属性/C-C++/常规/附加包含目录:
D:\Program Files\MATLAB\R2011a\extern\include
D:\Program Files\MATLAB\R2011a\extern\include\win64
2.2,配置项目属性页/配置属性/链接器/常规/附加库目录:
D:\Program Files\MATLAB\R2012b\extern\lib\win64\microsoft
2.3,配置项目属性页/配置属性/链接器/输入/附加依赖性:
填入ppp.lib mclmcrrt.lib mclmcr.lib
上面几步都是按照网上找的一步步来的,但是会有问题:无法识别的外部符号错误或者编译通过但是执行的时候找不到动态链接库。
2.4把 solution platform 调成x64的 ,如图下。否侧会有无法识别的外部符号错误。
2.5,把matlab的动态链接库添加到环境变量。如下图:
配置到此结束
3 测试是否成功
#include "stdafx.h"#include <iostream>
#include "mclmcr.h"
#include "mclcppclass.h"
#include "ppp.h"
int _tmain(int argc, _TCHAR* argv[])
{
if( !pppInitialize())
{
std::cout << "Could not initialize ppp!" << std::endl;
return -1;
}
try
{
mwArray k(1, 1, mxDOUBLE_CLASS);
char str[]="C:\\下载缩略图中的人工\\29.jpg";
mwArray name(str);
YesorNo(1, k,name);//matlab中的m文件
double y=k.Get(1,1);
std::cout<<y<<" "<<std::endl;
}
catch( const mwException& e)
{
std::cerr << e.what() << std::endl;
}
// terminate the lib
pppTerminate();
return 0;
}
都是从网上找的很多牛人写的资源,再加上自己的 测试。。。。
欢迎大家交流。。。