GME  13
CommonComponent.h
Go to the documentation of this file.
00001 #ifndef COMMONCOMPONENT_H
00002 #define COMMONCOMPONENT_H
00003 
00004 #include "CommonError.h"
00005 #include "Comdef.h"
00006 
00007 inline HRESULT CreateMgaComponent(CComPtr<IMgaComponent> &comp, LPCOLESTR ProgID)
00008 {
00009         
00010         comp = NULL;
00011 
00012         CComPtr<IUnknown> unk;
00013         HRESULT hr = unk.CoCreateInstance(ProgID);
00014         if (SUCCEEDED(hr)) {
00015                 hr = unk.QueryInterface(&comp);
00016                 if (FAILED(hr)) {
00017                         SetStandardOrGMEErrorInfo(hr);
00018                         CComPtr<IDispatch> disp;
00019                         hr = unk.QueryInterface(&disp);
00020                         if (SUCCEEDED(hr)) {
00021                                 hr = comp.CoCreateInstance(OLESTR("MgaUtil.ComponentProxy"));
00022                                 if (SUCCEEDED(hr)) {
00023                                         CComPtr<IMgaComponentProxy> proxy;
00024                                         hr = comp.QueryInterface(&proxy);
00025                                         if (SUCCEEDED(hr)) {
00026                                                 hr = proxy->put_DispatchComponent(disp);
00027                                         }
00028                                 }
00029                         }
00030                 }
00031         } else {
00032                 _bstr_t error;
00033                 GetErrorInfo(hr, error.GetAddress());
00034                 if (static_cast<LPOLESTR>(error))
00035                 {
00036                         SetErrorInfo(static_cast<LPOLESTR>(error + L": '" + ProgID + L"'"));
00037                 }
00038         }
00039         return hr;
00040 }
00041 
00042 inline HRESULT CreateMgaComponent(CComPtr<IMgaComponent> &comp, REFCLSID classID)
00043 {
00044         
00045         comp = NULL;
00046 
00047         CComPtr<IUnknown> unk;
00048         HRESULT hr = unk.CoCreateInstance(classID);
00049         if (SUCCEEDED(hr)) {
00050                 hr = unk.QueryInterface(&comp);
00051                 if (FAILED(hr)) {
00052                         CComPtr<IDispatch> disp;
00053                         hr = unk.QueryInterface(&disp);
00054                         if (SUCCEEDED(hr)) {
00055                                 hr = comp.CoCreateInstance(OLESTR("MgaUtil.ComponentProxy"));
00056                                 if (SUCCEEDED(hr)) {
00057                                         CComPtr<IMgaComponentProxy> proxy;
00058                                         hr = comp.QueryInterface(&proxy);
00059                                         if (SUCCEEDED(hr)) {
00060                                                 hr = proxy->put_DispatchComponent(disp);
00061                                         }
00062                                 }
00063                         }
00064                 }
00065         }
00066         return hr;
00067 }
00068 
00069 
00070 #endif // COMMONCOMPONENT_H