Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何结束COM自动化期间执行的进程_C++_Com_Ole - Fatal编程技术网

C++ 如何结束COM自动化期间执行的进程

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

以下是在后台运行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,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的具体情况;不过,你的代码看起来是正确的,服务器的行为取决于服务器本身。我在你的答案中添加了工作代码以使其更好。