Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2643674
  • 博文数量: 416
  • 博客积分: 10220
  • 博客等级: 上将
  • 技术积分: 4193
  • 用 户 组: 普通用户
  • 注册时间: 2006-12-15 09:47
文章分类

全部博文(416)

文章存档

2022年(1)

2021年(1)

2020年(1)

2019年(5)

2018年(7)

2017年(6)

2016年(7)

2015年(11)

2014年(1)

2012年(5)

2011年(7)

2010年(35)

2009年(64)

2008年(48)

2007年(177)

2006年(40)

我的朋友

分类: C/C++

2008-01-31 10:10:04

给你一段VC调用IDispatch的原理性代码(摘自我的讲义,无版权)

IDispatch 调用 DispDll.Fun 组件中的Add加法函数

::CoInitialize(NULL);
HRESULT hr;
IDispatch *pDispatch=NULL;
try
{
    CLSID clsid;
    hr=::CLSIDFromProgID(L"DispDll.Fun",&clsid);
    if(FAILED(hr))    throw(0);

    hr=::CoCreateInstance(clsid,NULL,CLSCTX_SERVER,
        IID_IDispatch,(LPVOID *)&pDispatch);
    if(FAILED(hr))    throw(0);

    OLECHAR *arrFunName[]={L"Add"};
    DISPID dispID;
    hr=pDispatch->GetIDsOfNames(IID_NULL,arrFunName,1,LOCALE_SYSTEM_DEFAULT,&dispID);
    if(FAILED(hr))    throw(0);
    VARIANT v[2];
    v[0].vt=VT_I4;    v[0].lVal=3;    //加数(参数2)
    v[1].vt=VT_I4;    v[1].lVal=2;    //被加数(参数1)
    DISPPARAMS params={v,NULL,2,0};
/*    params.rgvarg=v;
    params.rgdispidNamedArgs=NULL;
    params.cArgs=2;
    params.cNamedArgs=0;
*/
    VARIANT vResult;
    hr=pDispatch->Invoke(dispID,IID_NULL,LOCALE_SYSTEM_DEFAULT,DISPATCH_METHOD,
            ¶ms,&vResult,NULL,NULL);
    if(FAILED(hr))    throw(0);
    CString s;    s.Format("%d",vResult.lVal);
    AfxMessageBox(s);
    pDispatch->Release();
}
catch(...)
{
    if(pDispatch)    pDispatch->Release();
}
::CoUninitialize();
阅读(2678) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~