vc matlab com,基于COM的VC与Matlab混合编程实例

这里只介绍一个实例:

这里 以 Matlab擅长的矩阵运算为例来说明基于COM的VC与Matlab接口实现方法。在数 值 计 算过程中会经常遇到矩阵的分解问题,如求解线性方程组时若系数矩阵具有对称正定性,用Cholesky分解法求解比较方便,它可将对称正定矩阵A分解成非奇异上三角阵L,使得A=L TL。该分解在WC下编程较复杂,而在Matlab中比较容易。

下面 简 要 介绍在Matlab6.5 环境下开发COM组件,以及如何在VC中使用该C OM组件。首先 编 写 M函数文件Cholesky.m :

function [L]=Cholesky(A)

if( isempty(A))

L= [ ];

re tu rn ;

end

L= chol(A);%进行Cholesky分解

然后 按 上 文介绍的方法制作和注册(OM组件,设组件名称为CornTest,类名为C1sTest。

在 VC :中 新建一个名为Test的单文档工程,在StdAfx.h 文件中添加以下代码:

$kim port"c 八test\distrib\CoMTest一1_ 0 .dl !"ra w-in terfaces-only using namespace ComTest;

在 CT es tView类中添加成员函数DoTest( CDC pDC)和GetDirnsArray(VARIANT& var),源代码如下:

bI2ESULTC TestView::G etDinnaArray(VARIANT& var)

1 //创建二维数组

SAF EA R RAYBOUND rgsabound[2]={{12,1},{2,1}};

SAFEARRAY,psa= S afeArrayCreate(VT_R 8,2 , rgsabound);

if( ps a= = NULL) returnE _FAIL;

var .v t = VT_R8 | VT_ARRAY;

va r. parray =psa;

ret urn S _O K;

}

HRFSULT CTestView::DoTest(CDC* PDC)

}HRESULTh r= S_OK;

ICI sT es tPtrp tr;

VA R IA NT A,L ;

dou bl e, PV= N ULL;

char buffer[50];int j;

hr= ptr. CreateInstance(_uuidof(ClsTest));

if( FA IL ED(hr))g otoE XIT

Va ria ntI nit(&A);

Va ria ntI nit(&L);

if( FA IL ED((hr=GetDimsArray(A))))

got o E X IT ;

if( FA IL ED(SafeArrayAccessData(A.pa rray,(void‘,)

&pv))) {SafeArrayDestroy(A.pa rray);

got oE X IT ;}

//给二维数组赋值

pv[ 0] = 1.0;pv[1]=1.0;pv[2]=1.0;pv[3]= 2.0;

Saf eA rra yUnacces-Data(A.pa rray);

if( FA IL ED((hr二GetDimsArray(L))))

go to E X IT ;

ptr - cho lesky(1,& L,A) ;

if (F AI LED(SafeArrayAcces-Data(L.p array,(void* *)

&pv))) {SafeArrayDesttny(L.pa rray);

got oE X IT ;}

for (j= O ;j<4;j++)I

spr intf (bu ffe r," pv [% d]=%f小pv[j]);

//在窗口中输出L中各元素值

PDC - Te xto ut (50 ,5 0* j, bu ffer);}

Saf eA rra yUnaocessData(L.pa rray);

EXIT:

Va rian tC lear(&A);/ / 释放内存

Va rian tCl ear(&L);

ret ur nh r;

}

在 CT es tView类的OnDraw函数中添加以下代码:

char buffer[20];

if ((FAILED(Colnitialize(NULL)))) 1//初始化COM

spr int f(b uffer,"Colnitializef ailed.”);

pD C- T extOut(100,100,bu ffer);

exit (1 ); }

DDTest(pDC);

CoUninitialize(); //释放COM

上述 应 用 实例中,矩阵A= [1,1;1,2],程序经过编译

运行后可得到L=[1,1;0,1]0

由于 C O M技术涵盖的内容极其丰富,若要详细了解

VC与COM的接口问题,请参考有关资料。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值