[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