Chinaunix首页 | 论坛 | 博客
  • 博客访问: 90580
  • 博文数量: 50
  • 博客积分: 1086
  • 博客等级: 少尉
  • 技术积分: 420
  • 用 户 组: 普通用户
  • 注册时间: 2011-10-25 16:16
文章分类
文章存档

2011年(50)

我的朋友

分类: C/C++

2011-11-15 19:03:43

使用vs2008调用matlab6.5头文件matlab.hpp进行混编

 

之前在电脑中 "\Matlab_C\matlab6.5混编vc6调用cpp总结XI",已经分析了怎样在vc6的环境下调用matlab.hpp来执行matlab一些基本函数。
对于更高版本的vc来说,使用mcc或是其他的方式,与vs2008能够配合的只有matlab2008以上版本。matlab2008可谓是龟速中的极品,加之自己倒也用不着特别复杂的m文件,所以还是想在matlab.hpp上多费脑经。
 
C++程序中调用matlab c/c++ math & graphic library的函数。
先举个例子:
#include
#include
void main()
{
const char *p = "lib"; int argc = 1;
mlfHGInitialize( &argc, &p );
double data[] = { 1, 2, 3, 4, 5, 6 };
mwArray mat0(6, 1, data);
mwArray mat1(6, 1, data);
plot(mat0,mat1);
mlfHGWaitForFiguresToDie();
mlfHGTerminate();
}
这样就行了,只要编译器的设置适当,编译通过,运行后就会出现与matlab中使用p
lot一样的效果。程序中, mlfHGInitialize( &argc, &p );mlfHGWaitForFiguresToDie(); mlfHGTerminate();三个函数是使用图形库必不可少的。若只使用数学库,则均可不要
。这里的plot函数是在libsgl.hpp中声明的,大家可以查看一下,其中还有许多图形函数,如figure等等。这样,这些函数都可以直接调用了。关于mwArray类的用法,参见《MATLAB? C++ Math library》
 
现在说明一下编译器的设置。按照以前调用mcc生成的dll是编译器的设置,此程序在vc6.0下可以通过,在vc9.0下编译报错。但是,如果在程序中使用了cout等输入输出库,二者均出现连接错误。
解决方案如下:对vc9.0
需要在C:\Program Files\Microsoft Visual Studio 9.0\VC\include中加上几个重要的matlab.hpp有关的vc6头文件和lib(从vc6.0的vc98下include和lib中需要的文件拷贝出来的),包括:
ISTREAM.H
IOSTREAM.H
IOS.H
IO.H
STRING.H
STRSTREA.H
OSTREAM.H
IOMANIP.H
USEOLDIO.H
STREAMB.H
库文件:
MSVCIRT.lib
MSVCIRTD.lib
 
头文件的处理上来说,在vs2008的include文件夹下加上了一个vc6的文件夹"vc6",其中包括了这些头文件的声明也有相应的改动,比如#include "vc6/ios.h"
阅读(1675) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~