C++ 如何结束COM自动化期间执行的进程
以下是在后台运行Ms Word以实现OLE自动化的代码:C++ 如何结束COM自动化期间执行的进程,c++,com,ole,C++,Com,Ole,以下是在后台运行Ms Word以实现OLE自动化的代码: int-tmain(int-argc,_-TCHAR*argv[] { CoInitializeX(空,Conit_APARTMENTTHREADED); CLSID-CLSID; HRESULT hr=CLSIDFromProgID(L“Word.Application”、&clsid); IDispatch*pWApp; 如果(成功(hr)) { //这个过程从这里开始 hr=CoCreateInstance(clsid,NULL,C
int-tmain(int-argc,_-TCHAR*argv[]
{
CoInitializeX(空,Conit_APARTMENTTHREADED);
CLSID-CLSID;
HRESULT hr=CLSIDFromProgID(L“Word.Application”、&clsid);
IDispatch*pWApp;
如果(成功(hr))
{
//这个过程从这里开始
hr=CoCreateInstance(clsid,NULL,CLSCTX_本地_服务器,
IID_IDispatch(无效**)和pWApp);
cout您正在创建的对象有一个方法,您可以在Release()
您指向该对象的接口指针之前选择调用该方法:
退出Microsoft Word并选择性地保存或传送打开的文档
由于您有对象的接口,因此可以使用和方法来调用Word.Application.Quit()
方法,例如:
int _tmain(int argc, _TCHAR* argv[])
{
HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
if (SUCCEEDED(hr))
{
CLSID clsid;
hr = CLSIDFromProgID(L"Word.Application", &clsid);
if (SUCCEEDED(hr))
{
IDispatch *pWApp;
hr = CoCreateInstance(clsid, NULL, CLSCTX_LOCAL_SERVER, IID_IDispatch, (void **)&pWApp);
if (SUCCEEDED(hr))
{
cout << "success" << endl;
// use pWApp as needed ...
DISPID dispID;
LPOLESTR ptName = L"Quit"; //name of the method
hr = pWApp->GetIDsOfNames(IID_NULL, &ptName, 1, LOCALE_USER_DEFAULT, &dispID);
if (SUCCEEDED(hr))
{
//no parameters
DISPPARAMS dp = {NULL, NULL, 0, 0};
hr = pWApp->Invoke(dispID, IID_NULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_METHOD, &dp, NULL, NULL, NULL);
}
pWApp->Release();
}
}
CoUninitialize();
}
return 0;
}
int-tmain(int-argc,_-TCHAR*argv[]
{
HRESULT hr=CoInitializeX(空,Conit_APARTMENTTHREADED);
如果(成功(hr))
{
CLSID-CLSID;
hr=CLSIDFromProgID(L“Word.Application”、&clsid);
如果(成功(hr))
{
IDispatch*pWApp;
hr=CoCreateInstance(clsid,NULL,CLSCTX_本地_服务器,IID_IDispatch,(void**)和pWApp);
如果(成功(hr))
{
cout Invoke(dispID,IID\u NULL,LOCALE\u SYSTEM\u DEFAULT,DISPATCH\u METHOD,&dp,NULL,NULL,NULL);
}
pWApp->Release();
}
}
coninitialize();
}
返回0;
}
我认为,如果没有客户端正在使用,服务器在退出之前在内存中保留几分钟是正常的it@M.M啊,那么什么都不必做了?我不知道微软Word的具体情况;不过,你的代码看起来是正确的,服务器的行为取决于服务器本身。我在你的答案中添加了工作代码以使其更好。