程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 20141121調研,20141121

20141121調研,20141121

編輯:C++入門知識

20141121調研,20141121


20141121調研

1、在系統服務裡調用進程外COM的接口,接口中會啟動第三個進程,此時創建出來的進程外COM所在的進程和第三個進程,都是SYSTEM權限啟動的。

另外,如果之前進程外COM已啟動了一個進程,但不是SYSTEM權限的,那個系統服務調時,還會再創建一個新的COM進程

2、

一種調COM示例,使用了別人封的CDispatch類

  ::CoInitialize(NULL);
    CDispatch obj;
    IID _iid;
    //CLSIDFromString(L"{42637A0F-E8B8-4737-ABF4-F8B929E32651}", &_iid);
    CLSIDFromProgID(L"aaaaa.bbbb", &_iid);
    HRESULT hr = E_FAIL;
    CComPtr<IClassFactory> cf;
    //hr = CoGetClassObject(_iid, CLSCTX_INPROC_SERVER, NULL, IID_IClassFactory, (LPVOID*)&cf);//進程內
    hr = CoGetClassObject(_iid, CLSCTX_LOCAL_SERVER, NULL, IID_IClassFactory, (LPVOID*)&cf);//進程外
    if (cf)
    {
        hr = cf->CreateInstance(NULL, IID_IDispatch, (void**)&obj);
    }
    if (obj)
    {
        obj.Invoke(L"methodname", "參數");
    }
    obj = NULL;
    cf = NULL;
    ::CoUninitialize();

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved