[commit] r2064 - in trunk/GME: Common Core
GMESRC Repository Notifications
gme-commit at list.isis.vanderbilt.edu
Wed Sep 26 08:54:02 CDT 2012
Author: ksmyth
Date: Wed Sep 26 08:54:02 2012
New Revision: 2064
Log:
CoreCollectionHandler for IMgaFCOs et al. Overrides Collection::GetAll to work out-of-proc or out-of-apartment. Fixes out-of-proc Udm interpreters, others.
Added:
trunk/GME/Core/CoreCollectionHandler.rgs
Modified:
trunk/GME/Common/CommonCollection.h
trunk/GME/Core/Core.cpp
trunk/GME/Core/Core.dll.manifest
trunk/GME/Core/Core.rc
trunk/GME/Core/Core.vcxproj
trunk/GME/Core/Core.vcxproj.filters
trunk/GME/Core/CoreLib.idl
trunk/GME/Core/resource.h
Modified: trunk/GME/Common/CommonCollection.h
==============================================================================
--- trunk/GME/Common/CommonCollection.h Wed Sep 26 08:53:45 2012 (r2063)
+++ trunk/GME/Common/CommonCollection.h Wed Sep 26 08:54:02 2012 (r2064)
@@ -148,6 +148,32 @@
void push_best(std::vector<ITFTYPE*> &into, ITFTYPE *o) { into.push_back(o); }
template<class COLLITF, class COLLTYPE, class ITFTYPE, class OBJTYPE>
+class ATL_NO_VTABLE CCoreCollection;
+
+class __declspec(uuid("9FE3BB80-B596-41BA-910F-0FF9C3B4F38A")) CoreCollectionHandlerCLSID;
+
+template<class COLLITF, class COLLTYPE, class ITFTYPE, class OBJTYPE>
+class CCoreCollectionMarshalTearOff :
+ public CComTearOffObjectBase<CCoreCollection<COLLITF, COLLTYPE, ITFTYPE, OBJTYPE>>,
+ IStdMarshalInfo
+{
+BEGIN_COM_MAP(CCoreCollectionMarshalTearOff)
+ COM_INTERFACE_ENTRY(IStdMarshalInfo)
+END_COM_MAP()
+
+ public:
+ virtual HRESULT STDMETHODCALLTYPE GetClassForHandler(
+ __in DWORD dwDestContext,
+ __reserved void *pvDestContext,
+ __out CLSID *pClsid)
+ {
+ *pClsid = __uuidof(CoreCollectionHandlerCLSID);
+ return S_OK;
+ }
+};
+
+
+template<class COLLITF, class COLLTYPE, class ITFTYPE, class OBJTYPE>
class ATL_NO_VTABLE CCoreCollection :
public CComObjectRootEx<CComSingleThreadModel>,
public ICollectionOnSTLImpl<
@@ -161,11 +187,13 @@
typedef typename COLLTYPE::iterator ITERTYPE;
typedef CopyItfFromObj<ITFTYPE, OBJTYPE> FILL_COPYTYPE;
typedef CopyItfFromItf<ITFTYPE> GETALL_COPYTYPE;
+ typedef typename CCoreCollectionMarshalTearOff<COLLITF, COLLTYPE, ITFTYPE, OBJTYPE> ColTearOff;
BEGIN_COM_MAP(CLASS)
COM_INTERFACE_ENTRY(COLLITF)
COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY(ISupportErrorInfo)
+ COM_INTERFACE_ENTRY_TEAR_OFF(IID_IStdMarshalInfo, ColTearOff)
END_COM_MAP()
public:
Modified: trunk/GME/Core/Core.cpp
==============================================================================
--- trunk/GME/Core/Core.cpp Wed Sep 26 08:53:45 2012 (r2063)
+++ trunk/GME/Core/Core.cpp Wed Sep 26 08:54:02 2012 (r2064)
@@ -42,10 +42,226 @@
CComModule _Module;
+class CCoreCollectionHandler;
+
+class CCoreCollectionHandlerTearOff : public ICoreMetaObjects
+{
+ friend class CCoreCollectionHandler;
+ long refcount;
+ CComPtr<ICoreMetaObjects> m_pInner;
+ CComPtr<CCoreCollectionHandler> m_pHandler;
+
+ public:
+ CCoreCollectionHandlerTearOff() : refcount(1) {}
+
+ virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, __RPC__deref_out void __RPC_FAR *__RPC_FAR *ppvObject);
+
+ virtual ULONG STDMETHODCALLTYPE AddRef(void)
+ {
+ return InterlockedIncrement(&refcount);
+ }
+
+ virtual ULONG STDMETHODCALLTYPE Release(void)
+ {
+ long refcount = InterlockedDecrement(&refcount);
+ if (refcount == 0)
+ delete this;
+ return refcount;
+ }
+
+ // standard marshaller does not marshal array of interface pointers
+ virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE GetAll(/* [in] */ long count, /* [size_is][out] */ ICoreMetaObject **p)
+ {
+ for (long i = 0; i < count; i++)
+ {
+ ICoreMetaObject* o = nullptr;
+ HRESULT hr = get_Item(i+1, &o); // get_Item has 1-based index
+ if (FAILED(hr))
+ {
+ for (i--; i >= 0; i--)
+ {
+ (*(p + i))->Release();
+ (*(p + i)) = nullptr;
+ }
+ return hr;
+ }
+ (*(p + i)) = o;
+ }
+ return S_OK;
+ }
+
+ // Rest of this class delegates calls to m_pInner
+
+ virtual HRESULT STDMETHODCALLTYPE GetTypeInfoCount(__RPC__out UINT *pctinfo)
+ {
+ return m_pInner->GetTypeInfoCount(pctinfo);
+ }
+
+ virtual HRESULT STDMETHODCALLTYPE GetTypeInfo(/* [in] */ UINT iTInfo, /* [in] */ LCID lcid, /* [out] */ __RPC__deref_out_opt ITypeInfo **ppTInfo)
+ {
+ return m_pInner->GetTypeInfo(iTInfo, lcid, ppTInfo);
+ }
+
+ virtual HRESULT STDMETHODCALLTYPE GetIDsOfNames(/* [in] */ __RPC__in REFIID riid, /* [size_is][in] */ __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames,
+ /* [range][in] */ __RPC__in_range(0,16384) UINT cNames, /* [in] */ LCID lcid, /* [size_is][out] */ __RPC__out_ecount_full(cNames) DISPID *rgDispId)
+ {
+ return m_pInner->GetIDsOfNames(riid, rgszNames, cNames, lcid, rgDispId);
+ }
+
+ virtual /* [local] */ HRESULT STDMETHODCALLTYPE Invoke(/* [in] */ DISPID dispIdMember, /* [in] */ REFIID riid, /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags, /* [out][in] */ DISPPARAMS *pDispParams, /* [out] */ VARIANT *pVarResult, /* [out] */ EXCEPINFO *pExcepInfo,
+ /* [out] */ UINT *puArgErr)
+ {
+ return m_pInner->Invoke(dispIdMember, riid, lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
+ }
+
+ virtual HRESULT STDMETHODCALLTYPE get_Count(/* [retval][out] */ long *p)
+ {
+ return m_pInner->get_Count(p);
+ }
+
+ virtual HRESULT STDMETHODCALLTYPE get_Item(/* [in] */ long n, /* [retval][out] */ ICoreMetaObject **p)
+ {
+ return m_pInner->get_Item(n, p);
+ }
+
+ virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get__NewEnum(/* [retval][out] */ IUnknown **p)
+ {
+ return m_pInner->get__NewEnum(p);
+ }
+
+ virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE Insert(/* [in] */ ICoreMetaObject *p, /* [in] */ long at)
+ {
+ return m_pInner->Insert(p, at);
+ }
+
+ virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE Append(/* [in] */ ICoreMetaObject *p)
+ {
+ return m_pInner->Append(p);
+ }
+
+ virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE Find(/* [in] */ ICoreMetaObject *p, /* [in] */ long start, /* [retval][out] */ long *res)
+ {
+ return m_pInner->Find(p, start, res);
+ }
+
+ virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE Remove(/* [in] */ long n)
+ {
+ return m_pInner->Remove(n);
+ }
+};
+
+
+class CCoreCollectionHandler :
+ public CComObjectRootEx<CComMultiThreadModel>,
+ public CComCoClass<CCoreCollectionHandler, &CLSID_CoreCollectionHandler>,
+ public IUnknown
+{
+
+ DECLARE_GET_CONTROLLING_UNKNOWN()
+
+ DECLARE_REGISTRY_RESOURCEID(IDR_CORECOLLECTIONHANDLER)
+
+ class __declspec(uuid("c66a6c60-c1fd-11d3-9ad2-00aa00b6fe26"))
+ IMgaMetaFCOs;
+
+ CComPtr<IUnknown> m_pUnknownInner;
+ HRESULT FinalConstruct()
+ {
+ HRESULT hr = CoGetStdMarshalEx(m_pOuterUnknown, SMEXF_HANDLER, &m_pUnknownInner);
+ return hr;
+ }
+
+ static HRESULT WINAPI QI(void* pv, REFIID riid, LPVOID* ppv, DWORD_PTR dw)
+ {
+ CCoreCollectionHandler* _this = (CCoreCollectionHandler*)pv;
+ return _this->QI(riid, ppv, dw);
+ }
+
+ HRESULT WINAPI QI(REFIID riid, LPVOID* ppv, DWORD_PTR dw)
+ {
+ if (ppv == NULL)
+ return E_POINTER;
+
+ static const GUID guids[] = {
+//def lit(id): return "{%s, %s, %s, {%s, %s, %s}}" % ( hex(id.time_low), hex(id.time_mid), hex(id.time_hi_version), hex(id.clock_seq_hi_variant), hex(id.clock_seq_low), ', '.join((hex(ord(b)) for b in id.bytes[10:])))
+//print "\n".join(["%s, // %ss %s" % (lit(l[0]), l[1], l[0]) for l in ids])
+{0xc5aac2f0L, 0xc1fdL, 0x11d3L, {0x9aL, 0xd2L, 0x0, 0xaa, 0x0, 0xb6, 0xfe, 0x26}}, // MgaObjects c5aac2f0-c1fd-11d3-9ad2-00aa00b6fe26
+{0xc59c2210L, 0xc1fdL, 0x11d3L, {0x9aL, 0xd2L, 0x0, 0xaa, 0x0, 0xb6, 0xfe, 0x26}}, // MgaFolders c59c2210-c1fd-11d3-9ad2-00aa00b6fe26
+{0xc5f4c2f0L, 0xc1fdL, 0x11d3L, {0x9aL, 0xd2L, 0x0, 0xaa, 0x0, 0xb6, 0xfe, 0x26}}, // MgaFCOs c5f4c2f0-c1fd-11d3-9ad2-00aa00b6fe26
+{0xc6f3f340L, 0xc1fdL, 0x11d3L, {0x9aL, 0xd2L, 0x0, 0xaa, 0x0, 0xb6, 0xfe, 0x26}}, // MgaAttributes c6f3f340-c1fd-11d3-9ad2-00aa00b6fe26
+{0xc71a26f0L, 0xc1fdL, 0x11d3L, {0x9aL, 0xd2L, 0x0, 0xaa, 0x0, 0xb6, 0xfe, 0x26}}, // MgaParts c71a26f0-c1fd-11d3-9ad2-00aa00b6fe26
+{0xc7f19c60L, 0xc1fdL, 0x11d3L, {0x9aL, 0xd2L, 0x0, 0xaa, 0x0, 0xb6, 0xfe, 0x26}}, // MgaConnPoints c7f19c60-c1fd-11d3-9ad2-00aa00b6fe26
+{0xc79f1840L, 0xc1fdL, 0x11d3L, {0x9aL, 0xd2L, 0x0, 0xaa, 0x0, 0xb6, 0xfe, 0x26}}, // MgaRegNodes c79f1840-c1fd-11d3-9ad2-00aa00b6fe26
+{0xc66a6c60L, 0xc1fdL, 0x11d3L, {0x9aL, 0xd2L, 0x0, 0xaa, 0x0, 0xb6, 0xfe, 0x26}}, // MgaMetaFCOs c66a6c60-c1fd-11d3-9ad2-00aa00b6fe26
+{0x43d12111L, 0x12caL, 0x11d3L, {0xa6L, 0xecL, 0x0, 0x60, 0x8, 0x2d, 0xf8, 0x84}}, // CoreMetaObjects 43d12111-12ca-11d3-a6ec-0060082df884
+{0x43d12127L, 0x12caL, 0x11d3L, {0xa6L, 0xecL, 0x0, 0x60, 0x8, 0x2d, 0xf8, 0x84}}, // CoreMetaAttributes 43d12127-12ca-11d3-a6ec-0060082df884
+{0x43d12111L, 0x22caL, 0x11d3L, {0xa6L, 0xecL, 0x0, 0x60, 0x8, 0x2d, 0xf8, 0x84}}, // CoreObjects 43d12111-22ca-11d3-a6ec-0060082df884
+{0x43d12127L, 0x22caL, 0x11d3L, {0xa6L, 0xecL, 0x0, 0x60, 0x8, 0x2d, 0xf8, 0x84}}, // CoreAttributes 43d12127-22ca-11d3-a6ec-0060082df884
+{0xc61352b0L, 0xc1fdL, 0x11d3L, {0x9aL, 0xd2L, 0x0, 0xaa, 0x0, 0xb6, 0xfe, 0x26}}, // MgaMetaAspects c61352b0-c1fd-11d3-9ad2-00aa00b6fe26
+{0xc851e130L, 0xc1fdL, 0x11d3L, {0x9aL, 0xd2L, 0x0, 0xaa, 0x0, 0xb6, 0xfe, 0x26}}, // MgaMetaRoles c851e130-c1fd-11d3-9ad2-00aa00b6fe26
+{0xc6922740L, 0xc1fdL, 0x11d3L, {0x9aL, 0xd2L, 0x0, 0xaa, 0x0, 0xb6, 0xfe, 0x26}}, // MgaMetaAttributes c6922740-c1fd-11d3-9ad2-00aa00b6fe26
+{0xc6b85af0L, 0xc1fdL, 0x11d3L, {0x9aL, 0xd2L, 0x0, 0xaa, 0x0, 0xb6, 0xfe, 0x26}}, // MgaMetaFolders c6b85af0-c1fd-11d3-9ad2-00aa00b6fe26
+{0xc761f8c0L, 0xc1fdL, 0x11d3L, {0x9aL, 0xd2L, 0x0, 0xaa, 0x0, 0xb6, 0xfe, 0x26}}, // MgaMetaPointerSpecs c761f8c0-c1fd-11d3-9ad2-00aa00b6fe26
+{0xc795ed20L, 0xc1fdL, 0x11d3L, {0x9aL, 0xd2L, 0x0, 0xaa, 0x0, 0xb6, 0xfe, 0x27}}, // MgaMetaRegNodes c795ed20-c1fd-11d3-9ad2-00aa00b6fe27
+{0xc8ec3720L, 0xc1fdL, 0x11d3L, {0x9aL, 0xd2L, 0x0, 0xaa, 0x0, 0xb6, 0xfe, 0x26}}, // MgaConstraints c8ec3720-c1fd-11d3-9ad2-00aa00b6fe26
+{0xc8ec3720L, 0xc1fdL, 0x11d3L, {0x9aL, 0xd2L, 0x0, 0xaa, 0x0, 0xb6, 0xfe, 0x27}}, // MgaMetaParts c8ec3720-c1fd-11d3-9ad2-00aa00b6fe27
+{0xc8ec3723L, 0xc1fdL, 0x11d3L, {0x9aL, 0xd2L, 0x0, 0xaa, 0x0, 0xb6, 0xfe, 0x27}}, // MgaMetaModels c8ec3723-c1fd-11d3-9ad2-00aa00b6fe27
+{0xc8432623L, 0xc1fdL, 0x11d3L, {0x9aL, 0xd2L, 0x0, 0xaa, 0x0, 0xb6, 0xfe, 0x27}}, // MgaMetaConnJoints c8432623-c1fd-11d3-9ad2-00aa00b6fe27
+{0xc8124623L, 0xc51dL, 0x11d3L, {0x9aL, 0xd2L, 0x0, 0xaa, 0x0, 0xb6, 0xfe, 0x27}}, // MgaMetaPointerItems c8124623-c51d-11d3-9ad2-00aa00b6fe27
+{0xc8124623L, 0xc51dL, 0x1ad3L, {0x9aL, 0xd2L, 0x11, 0xaa, 0x1, 0x76, 0xfe, 0x27}}, // MgaMetaEnumItems c8124623-c51d-1ad3-9ad2-11aa0176fe27
+{0xc8a5ec80L, 0xc1fdL, 0x11d3L, {0x9aL, 0xd2L, 0x0, 0xaa, 0x0, 0xb6, 0xfe, 0x26}}, // MgaAddOns c8a5ec80-c1fd-11d3-9ad2-00aa00b6fe26
+{0xc87caa70L, 0xc1fdL, 0x11d3L, {0x9aL, 0xd2L, 0x0, 0xaa, 0x0, 0xb6, 0xfe, 0x26}}, // IMgaTerritorys c87caa70-c1fd-11d3-9ad2-00aa00b6fe26
+{0xc8cda760L, 0xc1fdL, 0x11d3L, {0x9aL, 0xd2L, 0x0, 0xaa, 0x0, 0xb6, 0xfe, 0x26}}, // MgaComponents c8cda760-c1fd-11d3-9ad2-00aa00b6fe26
+{0xc9d8df93L, 0xc1fdL, 0x11d3L, {0x9aL, 0xd2L, 0x0, 0xaa, 0x0, 0xb6, 0xfe, 0x26}}, // MgaClients c9d8df93-c1fd-11d3-9ad2-00aa00b6fe26
+ };
+
+ bool match = false;
+ if (riid != __uuidof(IDispatch)) // microoptimization
+ {
+ for (int i = 0; i < sizeof(guids) / sizeof(guids[0]); i++)
+ {
+ if (guids[i] == riid)
+ {
+ match = true;
+ break;
+ }
+ }
+ }
+ HRESULT hr;
+ CComPtr<ICoreMetaObjects> pCollection;
+ if (FAILED(hr = m_pUnknownInner->QueryInterface(riid, (void**)&pCollection)))
+ return hr;
+ if (!match)
+ {
+ *ppv = pCollection.Detach();
+ return S_OK;
+ }
+ CCoreCollectionHandlerTearOff* tearoff = new CCoreCollectionHandlerTearOff(); // refcount == 1
+ // We know that all the IMgaXXXs have the same vtable, so this works
+ tearoff->m_pInner = pCollection;
+ tearoff->m_pHandler = this;
+ *ppv = (ICoreMetaObjects*)tearoff;
+ return S_OK;
+ }
+
+BEGIN_COM_MAP(CCoreCollectionHandler)
+ COM_INTERFACE_ENTRY(IUnknown)
+ COM_INTERFACE_ENTRY_FUNC_BLIND(0, QI)
+END_COM_MAP()
+
+};
+
+HRESULT STDMETHODCALLTYPE CCoreCollectionHandlerTearOff::QueryInterface(REFIID riid, __RPC__deref_out void __RPC_FAR *__RPC_FAR *ppvObject)
+{
+ return this->m_pHandler->QueryInterface(riid, ppvObject);
+}
+
BEGIN_OBJECT_MAP(ObjectMap)
OBJECT_ENTRY(CLSID_CoreProject, CCoreProject)
OBJECT_ENTRY(CLSID_CoreBinFile, CCoreBinFile)
OBJECT_ENTRY(CLSID_CoreMetaProject, CCoreMetaProject)
+OBJECT_ENTRY(CLSID_CoreCollectionHandler, CCoreCollectionHandler)
END_OBJECT_MAP()
/////////////////////////////////////////////////////////////////////////////
Modified: trunk/GME/Core/Core.dll.manifest
==============================================================================
--- trunk/GME/Core/Core.dll.manifest Wed Sep 26 08:53:45 2012 (r2063)
+++ trunk/GME/Core/Core.dll.manifest Wed Sep 26 08:54:02 2012 (r2064)
@@ -16,6 +16,7 @@
<comClass clsid="{43D12128-12CA-11D3-A6EC-0060082DF884}" tlbid="{9E9AAACF-28B8-11D3-B36C-0060082DF884}" description="CoreMetaAttributes Class" threadingModel="Apartment"/>
<comClass clsid="{43D12112-22CA-11D3-A6EC-0060082DF884}" tlbid="{9E9AAACF-28B8-11D3-B36C-0060082DF884}" description="CoreObjects Class" threadingModel="Apartment"/>
<comClass clsid="{43D12128-22CA-11D3-A6EC-0060082DF884}" tlbid="{9E9AAACF-28B8-11D3-B36C-0060082DF884}" description="CoreAttributes Class" threadingModel="Apartment"/>
+ <comClass clsid="{9FE3BB80-B596-41BA-910F-0FF9C3B4F38A}" tlbid="{9E9AAACF-28B8-11D3-B36C-0060082DF884}" description="CoreCollectionHandler Class" threadingModel="Both"/>
<typelib tlbid="{9E9AAACF-28B8-11D3-B36C-0060082DF884}" resourceid="1" version="1.0" helpdir="" flags="HASDISKIMAGE"></typelib>
</file>
<comInterfaceExternalProxyStub name="ICoreProject" iid="{AD9DFA4E-2A3B-11D3-B36C-0060082DF884}" tlbid="{9E9AAACF-28B8-11D3-B36C-0060082DF884}" proxyStubClsid32="{00020424-0000-0000-C000-000000000046}"></comInterfaceExternalProxyStub>
@@ -32,4 +33,8 @@
<comInterfaceExternalProxyStub name="ISupportErrorInfo" iid="{DF0B3D60-548F-101B-8E65-08002B2BD119}" tlbid="{9E9AAACF-28B8-11D3-B36C-0060082DF884}" proxyStubClsid32="{DF0B3D60-548F-101B-8E65-08002B2BD119}"></comInterfaceExternalProxyStub>
<comInterfaceExternalProxyStub name="IGMEVersionInfo" iid="{9A228010-020B-11D2-BBB3-0040051F7117}" tlbid="{9E9AAACF-28B8-11D3-B36C-0060082DF884}" proxyStubClsid32="{00020424-0000-0000-C000-000000000046}"></comInterfaceExternalProxyStub>
<comInterfaceExternalProxyStub name="ICoreObjects" iid="{43D12111-22CA-11D3-A6EC-0060082DF884}" tlbid="{9E9AAACF-28B8-11D3-B36C-0060082DF884}" proxyStubClsid32="{00020424-0000-0000-C000-000000000046}"></comInterfaceExternalProxyStub>
+
+ <!-- comInterfaceProxyStub iid="{}" name="I" tlbid="{}" baseInterface="{iid}" proxyStubClsid32="{}" threadingModel="Both"/ -->
+
+
</assembly>
Modified: trunk/GME/Core/Core.rc
==============================================================================
--- trunk/GME/Core/Core.rc Wed Sep 26 08:53:45 2012 (r2063)
+++ trunk/GME/Core/Core.rc Wed Sep 26 08:54:02 2012 (r2064)
@@ -101,6 +101,7 @@
IDR_METASTATICPROJECT REGISTRY DISCARDABLE "MetaStaticProject.rgs"
IDR_COREBINFILE REGISTRY DISCARDABLE "CoreBinFile.rgs"
IDR_COREMETAPROJECT REGISTRY DISCARDABLE "CoreMetaProject.rgs"
+IDR_CORECOLLECTIONHANDLER REGISTRY DISCARDABLE "CoreCollectionHandler.rgs"
/////////////////////////////////////////////////////////////////////////////
Modified: trunk/GME/Core/Core.vcxproj
==============================================================================
--- trunk/GME/Core/Core.vcxproj Wed Sep 26 08:53:45 2012 (r2063)
+++ trunk/GME/Core/Core.vcxproj Wed Sep 26 08:54:02 2012 (r2064)
@@ -395,6 +395,7 @@
<ItemGroup>
<None Include="Core.def" />
<None Include="CoreBinFile.rgs" />
+ <None Include="CoreCollectionHandler.rgs" />
<None Include="CoreMetaProject.rgs" />
<None Include="CoreProject.rgs" />
<None Include="MetaStaticProject.rgs" />
Modified: trunk/GME/Core/Core.vcxproj.filters
==============================================================================
--- trunk/GME/Core/Core.vcxproj.filters Wed Sep 26 08:53:45 2012 (r2063)
+++ trunk/GME/Core/Core.vcxproj.filters Wed Sep 26 08:54:02 2012 (r2064)
@@ -93,6 +93,9 @@
<None Include="Core.def">
<Filter>Source Files</Filter>
</None>
+ <None Include="CoreCollectionHandler.rgs">
+ <Filter>Resource Files</Filter>
+ </None>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="Core.rc">
Added: trunk/GME/Core/CoreCollectionHandler.rgs
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ trunk/GME/Core/CoreCollectionHandler.rgs Wed Sep 26 08:54:02 2012 (r2064)
@@ -0,0 +1,14 @@
+HKCR
+{
+ NoRemove CLSID
+ {
+ ForceRemove {9FE3BB80-B596-41BA-910F-0FF9C3B4F38A} = s 'CoreCollectionHandler Class'
+ {
+ InprocHandler32 = s '%MODULE%'
+ {
+ val ThreadingModel = s 'Both'
+ }
+ 'TypeLib' = s '{9E9AAACF-28B8-11D3-B36C-0060082DF884}'
+ }
+ }
+}
Modified: trunk/GME/Core/CoreLib.idl
==============================================================================
--- trunk/GME/Core/CoreLib.idl Wed Sep 26 08:53:45 2012 (r2063)
+++ trunk/GME/Core/CoreLib.idl Wed Sep 26 08:54:02 2012 (r2064)
@@ -121,6 +121,15 @@
interface ISupportErrorInfo;
};
+ [
+ uuid(9FE3BB80-B596-41BA-910F-0FF9C3B4F38A)
+ ]
+ coclass CoreCollectionHandler
+ {
+ [default] interface IUnknown;
+ };
+
+
MGACOLL_COCLASS(43D12112-12CA-11D3-A6EC-0060082DF884, CoreMetaObject)
MGACOLL_COCLASS(43D12128-12CA-11D3-A6EC-0060082DF884, CoreMetaAttribute)
MGACOLL_COCLASS(43D12112-22CA-11D3-A6EC-0060082DF884, CoreObject)
Modified: trunk/GME/Core/resource.h
==============================================================================
--- trunk/GME/Core/resource.h Wed Sep 26 08:53:45 2012 (r2063)
+++ trunk/GME/Core/resource.h Wed Sep 26 08:54:02 2012 (r2064)
@@ -8,6 +8,7 @@
#define IDR_COREBINFILE 203
#define IDR_COREMETAPROJECT 204
#define IDR_COREXMLFILE 206
+#define IDR_CORECOLLECTIONHANDLER 103
// Next default values for new objects
//
More information about the gme-commit
mailing list