com组件相关

来源:互联网 发布:vb自动登录弹出窗口 编辑:程序博客网 时间:2024/06/11 21:05

1.      com 组件调用:

 

CLSID        clsid;                                                                 

    IDispatchpDisp;                                                                 

    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;

    }

};

原创粉丝点击