matlab的combuilder系列

matlabcombuilder系列-matlab下做com组件

     com buildermatlab6.5才有的,也是mathworks公司推荐使用于混合编程的,这些日子我对他进行了全方位的摸索,感觉是爽呆了,下面我们一起来揭开它的神秘面纱,^_^

     此系列分为以下几块:

     1.matlab下做com组件

     2.vb,c#.net实现调用

     3.vc实现调用

     4.打包

     5.优缺点评注

其中2,3部分可以选择一个看

有什么问题请发到邮箱: dkf03@mails.tsinghua.edu.cn,也可以上smth,ID:xxhn,bbfrog

后期补充:

6.vc中的数组和com中的VARIANT变量的相互转换(By capriccio)

7.vb,.net中的数组和com中的VARIANT变量的相互转换

8. MatlabVC混合编程 (idldll来调用com组件)

9.combuildervc混编中复数类型的输出(By LPCTSTR)

 

 

.matlab下做com组件

     comcomponent object module的简称,它是一种通用的对象接口,任何语言只要按照这种接口标准,就可以实现

调用它。matlab6.5新推出来的combuilder就是把matlab下的程序做成com组件,供其他语言调用。

     我们先准备两个测试文件,并copy一个图片到c盘下,起名叫1.jpg(这些你都可以改的,我这儿是为了程序方便)

     第一个叫im_test.m如下:

     function im_test              %这个文件不带输入与输出

     I=imread('c:/1.jpg');         %因为以前带有imshow的程序用mcc编成dll后用%不了,所以想试combuilder是否

     imshow(I);                    %能支持这些函数

     第二个叫split2rgb.m,就是前些日子Zosco发给我的那个程序,因为它用mcc编成dll后有问题,所以我在这儿继续将它进行测试,而且它也带有多个输入及输出参数,所以也正好拿来测试

     matlabworkspace下打comtool,就打开了matlab com builder,点击file-new project,新建一个工程,在component name里填上comtestClass name里填上一个sgltest(并将自动生成classes里的comtest remove),complie

code incc++都无所谓,将Complier options里的Use Handle Graphics library的复选框画上,点击ok就行了。然后点击project--Add files,im_test.msplit2rgb.m添加入工程,然后点Build-Com Object,就会在comtest/distrib/文件夹下生成一个comtest_1_0.dll(它就是做好的com组件)Buildmatlab已经自动将此dll在注

册表中注册,为了下面能用其他编译器调用,我们还需做一个准备工作,开一个dos窗口,进入<matlabroot>/bin/win32目录下(matlabroot为你机器上matlab安装的路径),regsvr32 mwcomutil.dll,即对mwcomutil.dll进行注册(这个dllmatlab下作的任何com组件都要用到的dll),下面我们在其他编译器下调用时就可以用了。

     ^_^,是不是觉得做起com组件来很简单呢,matlab下可以给com组件中的类添加成员、事件、方法等,我这儿其

实是给类sgltest添加了两个方法,怎么添加成员和方法可以参看matlabcom builder的帮助。

 

附录:split2rgb.m的源代码

 %%//   测试文件

function [m_nHeight,m_nWidth,mOrigR,mOrigG,mOrigB]=Split2RGB(FileName)

 

%%//  读入一个Jpg文件,

mOrigData=imread(FileName);

%mDestData=imresize(mOrigData,0.5);

imwrite(mOrigData,'c:/2.jpg');

 

%%//  用三个变量保存其R,G,B分量

mOrigR=mOrigData(:,:,1);

mOrigG=mOrigData(:,:,2);

mOrigB=mOrigData(:,:,3);

 

 

%%//  获得图象的高度,宽度

[m_nHeight,m_nWidth]=size(mOrigR);

 

figure(1);

set(gcf,'MenuBar','none')

imshow(mOrigData);

title(['Orginal Image:',FileName],'Color','b','FontSize',14);

xlabel(['Height: ',num2str(m_nHeight),'    Width :',num2str(m_nWidth)],'Color','b','FontSize',12);

 

 

%%//  param文件

paraFName=[FileName(1:length(FileName)-4),'.param'];

fid=fopen(paraFName,'w');

fwrite(fid,m_nHeight,'uint32');

fwrite(fid,m_nWidth,'uint32');

fclose(fid);

 

%%//   R 分量文件

RFName=[FileName(1:length(FileName)-4),'_R.rot'];

fid=fopen(RFName,'w');

fwrite(fid,mOrigR,'uint8');

fclose(fid);

 

%%//   G 分量文件

GFName=[FileName(1:length(FileName)-4),'_G.rot'];

fid=fopen(GFName,'w');

fwrite(fid,mOrigG,'uint8');

fclose(fid);

 

%%//   B 分量文件

BFName=[FileName(1:length(FileName)-4),'_B.rot'];

fid=fopen(BFName,'w');

fwrite(fid,mOrigB,'uint8');

fclose(fid);

 

.vb,c#.net实现调用

  这一部分讲vb,c#.net下怎么实现调用上一部分我们生成的comtest_1_0.dll(matlab下做的com组件),记得一定先要对mwcomutil.dll进行注册(怎么注册参看上一部分)

1.vb下实现调用

    打开或新建一个vb工程,点project-Reference,在弹出来的窗口中找到comtest 1.0 Type Library,将前面的复选框选上,点击ok,此时便将此com组件添加到工程里面去了,此时你可以用对象浏览器看到comtest下有个sgltest类,这个类里面有两个方法im_test,split2rgb,还有个MWFlags成员(这个成员是自动生成的),vb下测试代码如下:

    测试im_test方法的代码:

    Dim st As sgltest

    Set st = New sgltest

    Call st.im_test

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值