嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 2 元微信扫码支付:2 元
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
HRESULT OLEMethod(int nType, VARIANT* pvResult, IDispatch* pDisp, LPOLESTR ptName, int cArgs...)
{if(!pDisp)
{
return E_FAIL ;
}
va_list marker ;
va_start(marker, cArgs) ;
DISPPARAMS dp = {NULL, NULL, 0, 0} ;
DISPID dispidNamed = DISPID_PROPERTYPUT ;
DISPID dispID ;
char szName[200] ;
WideCharToMultiByte(CP_ACP, 0, ptName, -1, szName, 256, NULL, NULL) ;
HRESULT hr = pDisp->GetIDsOfNames(IID_NULL, &ptName, 1, LOCALE_USER_DEFAULT, &dispID) ;
if(hr != S_OK)
{
return hr ;
}
VARIANT* pArgs = new VARIANT[cArgs 1] ;
for(int i = 0 ;i < cArgs ; i )
{
pArgs[i] = va_arg(marker, VARIANT) ;
}
dp.cArgs = cArgs ;
dp.rgvarg = pArgs ;
if(nType & DISPATCH_PROPERTYPUT)
{
dp.cNamedArgs = 1 ;
dp.rgdispidNamedArgs = &dispidNamed ;
}
hr = pDisp->Invoke(dispID, IID_NULL, LOCALE_SYSTEM_DEFAULT, nType, &dp, pvResult, NULL, NULL) ;
if(hr != S_OK)
{
return hr ;
}
va_end(marker) ;
delete[] pArgs ;
return hr ;
}
HRESULT AutoWordToPrint(LPOLESTR docName)
{
HRESULT hr = S_OK ;
CoInitialize(NULL) ;
IDispatch* pWordApp = NULL ;
IDispatch* pDocs = NULL ;
IDispatch* pDoc = NULL ;
IDispatch* pWordBasic = NULL ;
CLSID clsid ;
hr = CLSIDFromProgID(L"Word.Application", &clsid) ;
if(hr != S_OK)
{
goto EXIT ;
}
hr = CoCreateInstance(clsid, NULL, CLSCTX_LOCAL_SERVER, IID_IDispatch, (void**)&pWordApp) ;
if(hr != S_OK)
{
goto EXIT ;
}
//VARIANT vtVisible;
//vtVisible.vt = VT_I4;
//vtVisible.lVal = 1;
//hr = OLEMethod(DISPATCH_PROPERTYPUT, NULL, pWordApp, L"Visible", 1, vtVisible);
//if(FAILED(hr))
//{
// goto EXIT;
//}
VARIANT vtDocCollection ;
VariantInit(&vtDocCollection) ;
hr = OLEMethod(DISPATCH_PROPERTYGET, &vtDocCollection, pWordApp, L"Documents", 0) ;
if(hr != S_OK)
{
goto EXIT ;
}
pDocs = vtDocCollection.pdispVal ;
if(pDocs)
{
VARIANT vtResult ;
VariantInit(&vtResult) ;
VARIANT vNoParam ;
VariantInit(&vNoParam) ;
V_VT(&vNoParam) = VT_ERROR ;
V_ERROR(&vNoParam) = DISP_E_PARAMNOTFOUND ;
VARIANT vReadOnly ;
VariantInit(&vReadOnly) ;
V_VT(&vReadOnly) = VT_BOOL ;
V_BOOL(&vReadOnly) = VARIANT_TRUE ;
hr = OLEMethod(DISPATCH_METHOD, &vtResult, pDocs, L"Open", 3, vReadOnly, vNoParam, COleVariant(docName)) ;
if(hr != S_OK)
{
goto EXIT ;
}
pDoc = vtResult.pdispVal ;
if(pDoc)
{
LPOLESTR szPrintDoc = L"PrintOut" ;
DISPID dispPrintID ;
hr = pDoc->GetIDsOfNames(IID_NULL, &szPrintDoc, 1, LOCALE_USER_DEFAULT, &dispPrintID) ;
if(hr != S_OK)
{
goto EXIT ;
}
DISPPARAMS dpPrint = {NULL, NULL, 0, 0} ;
VARIANT vtRetVal ;
VariantInit(&vtRetVal) ;
hr = pDoc->Invoke(dispPrintID, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, &dpPrint, &vtRetVal, NULL, NULL) ;
if(hr != S_OK)
{
goto EXIT ;
}
}
}
EXIT:
HRESULT hrClose = S_OK ;
HRESULT hrQuit = S_OK ;
if(pDoc)
{
VARIANT vtClose ;
vtClose.vt = VT_BOOL ;
vtClose.boolVal = false ;
hrClose = OLEMethod(DISPATCH_METHOD, NULL, pDoc, L"Close", 1, vtClose) ;
}
if(pWordApp)
{
hrQuit = OLEMethod(DISPATCH_METHOD, NULL, pWordApp, L"Quit", 0) ;
}
if(hrClose != S_OK)
{
hr = hrClose ;
}