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();