怎么樣以純idispatch方式而不是引入類型庫的方法調(diào)用Word?怎么樣以純idispatch方式而不是引入類型庫的方法調(diào)用Word?
熱心網(wǎng)友
int main(int argc, char* argv[]) { CoInitialize(NULL); CLSID clsid; HRESULT hr = CLSIDFromProgID(L"Word。Application", &clsid); if(FAILED(hr)) { ::MessageBox(NULL, "CLSIDFromProgID() failed", "Error", 0x10010); return -1; } IDispatch *pWordApp; hr = CoCreateInstance(clsid, NULL, CLSCTX_LOCAL_SERVER, IID_IDispatch, (void **)&pWordApp); if(FAILED(hr)) { ::MessageBox(NULL, "Word not registered properly", "Error", 0x10010); return -2; } IDispatch *pDocs; { VARIANT result; VariantInit(&result); AutoWrap(DISPATCH_PROPERTYGET, &result, pWordApp, L"Documents", 0); pDocs = result。pdispVal; } IDispatch *pBookMark; { VARIANT result; VariantInit(&result); AutoWrap(DISPATCH_METHOD, &result, pDocs, L"Add",0); pBookMark = result。pdispVal; } IDispatch *pDoc; { VARIANT result; VariantInit(&result); VARIANT x; x。vt = VT_BSTR; x。bstrVal = ::SysAllocString(L"C:\\Doc1。doc"); AutoWrap(DISPATCH_METHOD, &result, pDocs, L"Open", 1, x); pDoc = result。pdispVal; SysFreeString(x。bstrVal); } IDispatch *pRang; { VARIANT result; VariantInit(&result); AutoWrap(DISPATCH_METHOD, &result, pDoc, L"Range", 0); pRang = result。pdispVal; } { VARIANT result; VariantInit(&result); VARIANT x,y; x。vt = VT_BSTR; x。bstrVal = ::SysAllocString(L"just a test!"); y。vt = VT_BSTR; y。bstrVal = ::SysAllocString(L"d:\\docment1。doc"); AutoWrap(DISPATCH_PROPERTYPUT, &result, pRang, L"Text", 1, x); AutoWrap(DISPATCH_METHOD, &result, pDoc, L"SaveAs", 1, y); SysFreeString(x。bstrVal); SysFreeString(y。bstrVal); } AutoWrap(DISPATCH_METHOD, NULL, pDoc, L"Close", 0); AutoWrap(DISPATCH_METHOD, NULL, pWordApp, L"Quit", 0); pBookMark-Release(); pRang-Release(); pDoc-Release(); pDocs-Release(); pWordApp-Release(); CoUninitialize(); return 0; } 。