像VB一樣在VC中隱式調用COM(VC的後期綁定方式)

來源:互聯網
上載者:User

 1.建立COM對象(comdll.classname)

IDispatch* CreateClassComDispatch(BSTR sClassName)<br />{<br /> CLSID clsid;<br /> IUnknown *pUnk;<br /> IDispatch *pDisp;<br /> HRESULT hr;<br /> CLSIDFromProgID(sClassName, &clsid);<br /> hr = CoInitialize(NULL);<br /> if(FAILED(hr))<br /> return FALSE;<br /> hr = CoCreateInstance(clsid,NULL,CLSCTX_ALL,IID_IUnknown,(void**)&pUnk);<br /> if(FAILED(hr))<br /> return FALSE;<br /> hr = pUnk->QueryInterface(IID_IDispatch, (void **)&pDisp);<br /> if(FAILED(hr))<br /> {<br /> pUnk->Release();<br /> return FALSE;<br /> }<br /> return pDisp;<br />}

2.調用

BOOL retValue;<br /> HRESULT hr;<br /> DISPID idd;<br /> VARIANTARG varResult;<br /> IDispatch *pDisp;<br /> try<br /> {<br /> VariantInit(&varResult);<br /> retValue = TRUE;<br /> //對應組件<br /> _bstr_t bstrCom = _bstr_t(libName);<br /> pDisp = CreateClassComDispatch(bstrCom);<br /> if(pDisp == NULL)<br /> return NULL;<br /> //方法名<br /> LPOLESTR str = L".......";<br /> //參數初始化<br /> int ParamsNumber = 2;<br /> VARIANTARG avarParams[2];<br /> for(int i=0;i<ParamsNumber;i++){<br /> ::VariantInit( &avarParams[i] );<br /> }<br /> _bstr_t bstrTemp = _bstr_t(lpPassword);<br /> avarParams[0].vt = VT_BSTR;<br /> avarParams[0].bstrVal = bstrTemp.copy();<br /> _bstr_t bstrTemp1 = _bstr_t(lpFileName);<br /> avarParams[1].vt = VT_BSTR;<br /> avarParams[1].bstrVal = bstrTemp1.copy();<br /> DISPPARAMS params = { avarParams, NULL, ParamsNumber, 0 };<br /> //得到ID<br /> hr = pDisp->GetIDsOfNames(IID_NULL,&str,1,NULL,&idd);<br /> if(!FAILED(hr))<br /> {<br /> hr = pDisp->Invoke(idd, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_PROPERTYGET, &params, &varResult, NULL, NULL);<br /> if(FAILED(hr))<br /> retValue = FALSE;<br /> }<br /> else<br /> {<br /> retValue = FALSE;<br /> }<br /> for(int j=0;j<ParamsNumber;j++){<br /> ::VariantClear( &avarParams[j] );<br /> }<br /> ::VariantClear(&varResult);</p><p> if(!retValue)<br /> return NULL;<br /> else<br /> return (HBITMAP)varResult.lVal;<br /> }<br /> catch(...)<br /> {<br /> }<br /> return NULL;

3.釋放

::CoUninitialize();

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.