vc调用matlab生成的dll实例

1:在matlab中建立add.m文件,并编译成dll库.

  function [a,b]=add(x,y) 
    a=2*x+y; 
    b=3*y; end




首先把这个函数编译成C++接口的DLL。为此,我们需要先设置MATLAB编译器。具体做法是在MATLAB命令行执行mex -setup 和“mbuild -setup”。然后用下面这行命令把myadd2函数编译成一个C++接口的DLL:

mcc-W cpplib:add-T link:lib add.m

结果,我们将会得到包含add.dll,add.ctf,add.h,add.lib等在内的一些文件。接下来我们只需要这四个文件。此时,打开add.h看看,在文件的最下面我们可以发现C++接口的函数定义。仔细观察过后,我们可以发现,这个接口函数的参数是按照这样的顺序定义的:输出参数的个数、输出参数、以及输入参数。

#include<iostream> #include"add.h" int main(int argc,char**argv) {

if(!addInitialize()) { initilize failed!!!"<<std::endl; return -1; } mwArray a(1,1,mxDOUBLE_CLASS); mwArray b(1,1,mxDOUBLE_CLASS); a(1,1)=20; b(1,1)=30; mwArray x(1,1,mxDOUBLE_CLASS); mwArray y(1,1,mxDOUBLE_CLASS); //输出参数个数。输出参数,输入参数。 add(2,x,y,a,b);

double *i=new double; double *j=new double ; x.GetData(i,1); y.GetData(j,1);

std::cout<<"x="<<*i<<" y="<<*j<<std::endl;

getchar(); return 0; }

vc调用matlab生成的dll实例
附上我在项目写的一个例子。
#include"h_single.h"


/************************************************************************/
/*  single函数。单回路                                                    */
/*   BY:   ithzhang  [email protected]                                     */
/* date:   2012年4月11日      11:32                                      */
/*                                                                      */
/*                                                                      */ 
/* current:电流,p:3*2数组,  坐标                                         */
/* delta:步长,left:坐标系左起始点,right:坐标系右结束点, out:传出,其值为:    */
/* left到right步长为delta时,每一个横坐标作对应的纵坐标。(right-left+1)/delta项 */
/************************************************************************/

bool single(double current,double coordinate[3][2],double delta,
	double left,double right,double *(&out))
{
	/************************************************************************/
	/* 初始化h_single库,否则将会出现各种错误                                     */
	/************************************************************************/
	if(!h_singleInitialize())
	{
		return false;
	}

	/************************************************************************/
	/* 定义mwArray类型的各个变量,传入matlab导出的h_single函数。                   */
	/************************************************************************/
	mwArray ii   (1,1,mxDOUBLE_CLASS);
	mwArray p    (3,2,mxDOUBLE_CLASS);
	mwArray step (1,1,mxDOUBLE_CLASS);
	mwArray s1   (1,1,mxDOUBLE_CLASS);
	mwArray s2   (1,1,mxDOUBLE_CLASS);

	int num =(right-left)/delta+1;
	mwArray	B_m(2,num,mxDOUBLE_CLASS);

	ii(1,1)   = current;
	step(1,1) = delta;
	s1(1,1)   = left;
	s2(1,1)   = right;

	for(int i = 0;i < 3; i++)
	{
		for(int j = 0;j < 2; j++)
		{
			p(i + 1,j + 1) = coordinate[i][j];
		}
	}
	/************************************************************************/
	/* 调用matlab导出的h_single函数。h_single( 传出参数个数,传出参数,各个传入参数) */
	/************************************************************************/
	h_single(1,B_m,ii,p,step,s1,s2);


	/************************************************************************/
	/* 为传入指针申请内存空间,存储从h_single返回的结果。注意out传入时是引用类型的指针。 */
	/************************************************************************/
	out = new double[num];
	B_m.GetData(out,num);


	/************************************************************************/
	/* 执行成功返回true。                                                                     */
	/************************************************************************/
	return true;

}

你可能感兴趣的:(matlab)