com组件相关

1.      com 组件调用:

 

CLSID        clsid;                                                                 

    IDispatch pDisp;                                                                 

    HRESULT     hr = ::CLSIDFromProgID(L"MyMathComPro.MathFunc.1",&clsid);                    

    if (FAILED(hr)) {                                                                  

        return ;                                                                       

    }                                                                                  

    hr = ::CoCreateInstance(clsid, NULL, CLSCTX_ALL, IID_IDispatch,(LPVOID*)&pDisp);  

    if (FAILED(hr)) {                                                                  

        return ;                                                                       

    }          

int a = 0, b = 5,c = 8;

    if( pDisp )

    {

        CComDispatchDriverspDisp(pDisp);

        VARIANT vIn[2];

        vIn[0].vt = VT_INT;

        vIn[0].lVal = b;   

        vIn[1].vt = VT_INT;

        vIn[1].lVal = c;

        VARIANTvRet;

        HRESULThr = spDisp.InvokeN(_T("MathOut"), vIn,2, &vRet );

        a = vRet.lVal;

    }                                                          

   

客户端调用:

IDispatch*pDisp = EClientKernel::QueryService(_T("MathFunc"));

Dll要放到安装目录的service目录下面,才可以调用成功

 

 

2.  com组件的编写:

 

STDMETHODIMP CMathFunc::MathOut(VARIANTa, VARIANTb, VARIANT*pResult)

{

    AFX_MANAGE_STATE(AfxGetStaticModuleState());

 

 

    int out;

    MathImpl::instance().MyAddFunc(VToInt(a,0),VToInt(b,0),out);

 

    pResult->vt = VT_INT;

    pResult->intVal = out;

 

    return S_OK;

}

 

功能实现类:

 

class MathImpl

{

public:

    MathImpl(void);

    ~MathImpl(void);

 

 

    void MyAddFunc(int a, int b, int& c);

public:

    static MathImpl&instance() {

       static MathImpl obj;

       return obj;

    }

};

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值