VC调用matlab生成的COM组件
|
|
Author: devil_v6 | Date: 2009-04-17 |
View: 1714 |
会员博客 - 个人博客 | Digg:
1
|
|
1. 设置编译器。在MATLAB命令窗口里敲:>>mbuild –setup,完成编译器的设置。 2. 编写M函数文件. 3. 在命令窗口敲:>>comtool,出现com组件builder。选择FILE选项->New Project选项。出现以下界面。
Component name选项:设置com组件的名称,注意不要和上面添加的m文件重名。 5. 单击Build按钮,选中Com Object选项,这时com-builder会帮你自动编译连接该组件,生成所需要的头文件,源文件,接口描述文件,动态连接库文件,等等。在右侧Build Status显示框里给出了编译的过程和信息。在菜单Component->Component Info里有关于接口、类、库的信息。在..\work\xxcom文件夹里,出现了两个子文件夹,distrib和src,这是我们VC中需要用到的文件、库、资源、接口等。在src\xxcom_idl_i.c中,有关于com类和com接口的GUID。其中CLSID(类的GUID)在VC编程中需要用到。别急,还有一步打包发布。选择Component->Package Component,系统就会自己帮你打包了。打包文件在distrib文件夹中有xxcom可执行文件。拷贝..\work\xxcom文件夹下所有文件,在另外一个机器上,双击xxcom可执行程序,注册com组件,。你的程序,就可以在其他机器上执行了。 BOOL suc = AfxOleInit(); // 初始化OLE
if (suc==FALSE) { ::AfxMessageBox("初始化OLE失败!"); return FALSE; } ......
其次,在 CTest01Dlg.h里包含xxcom_idl.h头文件;并从..\xxcom\src\xxcom_idl_i.c中拷贝类的GUID并复制到CTest01Dlg.h文件类定义的上面。
#include "xxcom_idl.h"
///////////////////////////////////////////////////////////////////////////// // CTest01Dlg dialog const CLSID CLSID_cxx = {0x37C14FC3,0x7B1A,0x4711,{0xA2,0x99,0x48,0x29,0x7B,0xA5,0x6D,0xE1}}; class CTest01Dlg : public CDialog
{ public:
Icxx m_pRsp; // Construction public: CTest01Dlg(CWnd* pParent = NULL); // standard constructor ......
然后,就是调用了~
void CTest01Dlg::OnBtnRsp()
{ m_pRsp.CreateDispatch(CLSID_cxx,NULL); //创立接口 COleDispatchDriver(); //连接(此句可以不写) VARIANT x; VARIANT y; VARIANT s; VariantInit(&x); //初始化 VariantInit(&y); VariantInit(&s); x.vt = VT_R8; //类型(双精度型)
y.vt = VT_R8; s.vt = VT_R8; //数组传递数据 x.dblVal=3.2; y.dblVal=3.2; s.dblVal=0.0; LONG para = 1;
//调用方法 m_pRsp.add(para,&s,x,y);/*输出参数的个数*/ // ::AfxMessageBox("调用结束!"); m_pRsp.DetachDispatch(); m_pRsp.ReleaseDispatch(); } |