我就是想把Matlab7.5中的m函数转换成VC++6.0动态链接库,以便于VC调用!我按照网上的方法,使用mex -setuo和mbuild -setup设置了MATLAB编译器,然后用MCC命令 mcc -W cpplib:libsum_prod -T link:lib sum_prod将sum_prod.m 函数传换成dll等一些文件,在VC中新建WIN32控制台应用程序,配置VC的环境,在TOOlS->Options… 菜单项,选择 Directories 标签,在 include files 里面加入C:\PROGRAMFILES\MATLAB\R2007B\EXTERN\INCLUDE,在 Library files 里面加入C:\PROGRAM FILES\MATLAB\R2007B\EXTERN\LIB\WIN32\MICROSOFT\MSDEV,这里我觉得是不是‘MSDEV’有问题,这是我从VC的快捷方式中找到的名称,是不是需要用网上写的MSVC60?
然后将dll,;ib,h,ctf文件放在VC的目录下,添加h文件,然后加入这段代码
#include "iostream.h" // 输入输出头文件
#include "mclmcr.h" // mwArray 类型声明
#include "libsum_prod.h" // DLL 头文件
void display(const double* data, const int r, const int c, const char* name);
int main()
{
// 初始化程序
if( ! mclInitializeApplication(NULL,0) )
{
fprintf(stderr, "Could not initialize the application.\n");
exit(1);
}
// 初始化库
if (! libsum_prodInitialize() )
{
fprintf(stderr,"Could not initialize the library.\n");
exit(1);
}
// 声明 DLL 函数输入输出 mwArray 对象
mwArray X(2,3,mxDOUBLE_CLASS);
mwArray Y(2,3,mxDOUBLE_CLASS);
mwArray SUM,PROD;
double x[] = {1,2,3,4,5,6};
double y[] = {7,8,9,10,11,12};
double *sum,*prod;
sum = new double[6];
prod = new double[6];
// 给输入 mwArray 对象赋值
X.SetData(x,6);
Y.SetData(y,6);
// 调用 DLL 函数
sum_prod(2,SUM,PROD,X,Y) ;
// 取出输出数据
SUM.GetData(sum,6);
PROD.GetData(prod,6);
// 显示 mwArray 对象
// std::cout << "SUM = " << std::endl << SUM << std::endl;;
// std::cout << "PROD = " << std::endl << PROD << std::endl;;
display(sum,2,3,"SUM");
display(prod,2,3,"PROD");
delete sum;
delete prod;
// 关闭库和程序
libsum_prodTerminate() ;
mclTerminateApplication() ;
return 0;
}
// 显示矩阵函数
void display(const double* data, const int r, const int c, const char* name)
{
int i,j;
printf("%s = \n",name);
for(i=0;i
{
printf("\t");
for(j=0;j
printf("% 4.2f \t",data[j*r+i]);
printf("\n");
}
printf("\n");
}
然后执行,就出现Compiling...
trymatlab.cpp
Linking...
LINK : fatal error LNK1104: cannot open file "mclmcrrt.lib"
Error executing link.exe.
的错误!
请高人给指明一下,是什么原因呢?
m程序内容如下:
function [sum,prod] = sum_prod(p1,p2)
sum = p1+p2; % p1 与 p2 的和
prod = p1.*p2; % p1 与 p2 的点乘