注册 登录
编程论坛 C++教室

采用matlab形成了动态库 然后用C+调用的时候出错了 不知道为什么 大家给看看呗

发布于 2012-04-14 17:30, 500 次点击
主函数为
#include"stdio.h"
#include "iostream.h" // 输入输出头文件
#include "mclmcr.h" // mxArray 类型声明
#include "libsum_prod.h" // DLL 头文件
#include"libtezhengzhi.h"
void display(const mxArray* in, const char* name);
int main()
{
    int i,j,k;
    float G2[5][5];
    double *A,*B;
// 初始化程序
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 函数输入输出 mxArray 对象
mxArray *X,*Y;
mxArray *SUM=NULL,*PROD=NULL;
// 给输入 mxArray 对象分配内存
X = mxCreateDoubleMatrix(2,3,mxREAL);
Y = mxCreateDoubleMatrix(2,3,mxREAL);
double x[] = {1,2,3,4,5,6};
double y[] = {7,8,9,10,11,12};
// 给输入 mxArray 对象赋值
memcpy(mxGetPr(X),x,6*sizeof(double));
memcpy(mxGetPr(Y),y,6*sizeof(double));
// 调用 DLL 函数,注意输入与输出的接口是不同的
mlfSum_prod(2,&SUM,&PROD,X,Y) ;
// 显示 mxArray 对象
display(SUM,"SUM");
display(PROD,"PROD");
// 释放输入输出 mxArray 对象所占用的内存
// 注意输出对象的内存是在调用 DLL 函数过程中分配的
mxDestroyArray(X);
mxDestroyArray(Y);
mxDestroyArray(SUM);
mxDestroyArray(PROD);
// 关闭库和程序
libsum_prodTerminate() ;
if (! libtezhengzhiInitialize())
{
fprintf(stderr,"Could not initialize the library.\n");
exit(1);
}
for(i=1;i<=5;i++)
for(j=1;j<=5;j++)
G2[i][j]=1;
// 声明 DLL 函数输入输出 mxArray 对象
mxArray *G1;
mxArray *V=NULL,*D=NULL;
// 给输入 mxArray 对象分配内存
G1=mxCreateDoubleMatrix(5,5,mxREAL);
// 给输入 mxArray 对象赋值
memcpy(mxGetPr(G1),G2,5*5*sizeof(double));
// 调用 DLL 函数,注意输入与输出的接口是不同的
mlftezhengzhi(2,&V,&D,G1) ;
A=mxGetPr(D);//将matlab空间 D中数据放在矩阵A中
B=mxGetPr(V);//将matlab空间 V中数据放在矩阵B中
// 释放输入输出 mxArray 对象所占用的内存
// 注意输出对象的内存是在调用 DLL 函数过程中分配的
mxDestroyArray(G1);
mxDestroyArray(V);
mxDestroyArray(D);
// 关闭库
libtezhengzhiTerminate() ;
mclTerminateApplication() ;
return 0;
}
// 显示矩阵函数
void display(const mxArray* in, const char* name)
{
int i,j,r,c;
double *data;
data = mxGetPr(in);
r = mxGetM(in);
c = mxGetN(in);
printf("%s = \n",name);
for(i=0;i<r;i++)
{
printf("\t");
for(j=0;j<c;j++)
printf("% 4.2f \t",data[j*r+i]);
printf("\n");
}
printf("\n");
}
5 回复
#2
2012-04-14 17:32
libtezhengzhi.h  文件和libsum_prod.h文件都是matlab生成的
要是有要看的话 我可以贴上来
#3
2012-04-14 17:32
报错: error C2065: 'mlftezhengzhi' : undeclared identifier
令人疑惑的是,第一个动态库没有错,第二个有错
#4
2012-04-14 22:24
木有人回答吗?
#5
2012-04-15 09:37
我自己找出来了
居然是 matlab在形成库的时候自动把第一个字母变成大写!!!!!
#6
pangding2012-04-15 18:48
看来求人不如求已呀。一般人消化消化你提的问题都得用些个时间。
1