[GME-commit] GMESRC/GME/Gme mfcdual.cpp,NONE,1.1 mfcdual.h,NONE,1.1 GME.dsp,1.89,1.90 GMEApp.cpp,1.119,1.120 GMEOLEApp.cpp,1.4,1.5 GMEOLEApp.h,1.1,1.2 GMEOLEAspect.cpp,1.2,1.3 GMEOLEAspect.h,1.1,1.2 GMEOLEColl.cpp,1.2,1.3 GMEOLEColl.h,1.2,1.3 GMEOLEModel.cpp,1.5,1.6 GMEOLEModel.h,1.2,1.3 GMEOLEPanel.cpp,1.2,1.3 GMEOLEPanel.h,1.1,1.2 GMEView.cpp,1.152,1.153 GmeLib.idl,1.7,1.8 ScrollZoomView.cpp,1.15,1.16 StdAfx.h,1.9,1.10 GME.odl,1.3,NONE

gme-commit at list.isis.vanderbilt.edu gme-commit at list.isis.vanderbilt.edu
Thu Jul 22 10:05:43 CDT 2004


Update of /var/lib/gme/GMESRC/GME/Gme
In directory braindrain:/tmp/cvs-serv21898/GME/Gme

Modified Files:
	GME.dsp GMEApp.cpp GMEOLEApp.cpp GMEOLEApp.h GMEOLEAspect.cpp 
	GMEOLEAspect.h GMEOLEColl.cpp GMEOLEColl.h GMEOLEModel.cpp 
	GMEOLEModel.h GMEOLEPanel.cpp GMEOLEPanel.h GMEView.cpp 
	GmeLib.idl ScrollZoomView.cpp StdAfx.h 
Added Files:
	mfcdual.cpp mfcdual.h 
Removed Files:
	GME.odl 
Log Message:
Added dual interfaces to the GUI Automation

CVS User: volgy

--- NEW FILE: mfcdual.cpp ---
// mfcdual.cpp: Helpful functions for adding dual interface support to
//              MFC applications

// This is a part of the Microsoft Foundation Classes C++ library.
// Copyright (c) Microsoft Corporation.  All rights reserved.
//
// This source code is only intended as a supplement to the
// Microsoft Foundation Classes Reference and related
// electronic documentation provided with the library.
// See these sources for detailed information regarding the
// Microsoft Foundation Classes product.

#include "stdafx.h"

#include <afxpriv.h>

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// DualHandleException

HRESULT DualHandleException(REFIID riidSource, const CException* pAnyException)
{
	USES_CONVERSION;

	ASSERT_VALID(pAnyException);

	TRACE0("DualHandleException called\n");

	// Set ErrInfo object so that VTLB binding container
	// applications can get rich error information.
	ICreateErrorInfo* pcerrinfo;
	HRESULT hr = CreateErrorInfo(&pcerrinfo);
	if (SUCCEEDED(hr))
	{
		TCHAR   szDescription[256];
		LPCTSTR pszDescription = szDescription;
		GUID    guid = GUID_NULL;
		DWORD   dwHelpContext = 0;
		BSTR    bstrHelpFile = NULL;
		BSTR    bstrSource = NULL;
		if (pAnyException->IsKindOf(RUNTIME_CLASS(COleDispatchException)))
		{
			// specific IDispatch style exception
			COleDispatchException* e = (COleDispatchException*)pAnyException;

			guid = riidSource;
			hr = MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF,
							  (e->m_wCode + 0x200));

			pszDescription = e->m_strDescription;
			dwHelpContext = e->m_dwHelpContext;

			// propagate source and help file if present
			// call ::SysAllocString directly so no further exceptions are thrown
			if (!e->m_strHelpFile.IsEmpty())
				bstrHelpFile = ::SysAllocString(T2COLE(e->m_strHelpFile));
			if (!e->m_strSource.IsEmpty())
				bstrSource = ::SysAllocString(T2COLE(e->m_strSource));

		}
		else if (pAnyException->IsKindOf(RUNTIME_CLASS(CMemoryException)))
		{
			// failed memory allocation
			AfxLoadString(AFX_IDP_FAILED_MEMORY_ALLOC, szDescription);
			hr = E_OUTOFMEMORY;
		}
		else
		{
			// other unknown/uncommon error
			AfxLoadString(AFX_IDP_INTERNAL_FAILURE, szDescription);
			hr = E_UNEXPECTED;
		}

		if (bstrHelpFile == NULL && dwHelpContext != 0)
			bstrHelpFile = ::SysAllocString(T2COLE(AfxGetApp()->m_pszHelpFilePath));

		if (bstrSource == NULL)
			bstrSource = ::SysAllocString(T2COLE(AfxGetAppName()));

		// Set up ErrInfo object
		pcerrinfo->SetGUID(guid);
		pcerrinfo->SetDescription(::SysAllocString(T2COLE(pszDescription)));
		pcerrinfo->SetHelpContext(dwHelpContext);
		pcerrinfo->SetHelpFile(bstrHelpFile);
		pcerrinfo->SetSource(bstrSource);

		TRACE("\tSource = %ws\n", bstrSource);
		TRACE("\tDescription = %s\n", pszDescription);
		TRACE("\tHelpContext = %lx\n", dwHelpContext);
		TRACE("\tHelpFile = %ws\n", bstrHelpFile);

		// Set the ErrInfo object for the current thread
		IErrorInfo* perrinfo;
		if (SUCCEEDED(pcerrinfo->QueryInterface(IID_IErrorInfo, (LPVOID*)&perrinfo)))
		{
			SetErrorInfo(0, perrinfo);
			perrinfo->Release();
		}

		pcerrinfo->Release();
	}

	TRACE("DualHandleException returning HRESULT %lx\n", hr);

	return hr;
}

--- NEW FILE: mfcdual.h ---
// mfcdual.h: Helpful macros for adding dual interface support to
//            MFC applications

// This is a part of the Microsoft Foundation Classes C++ library.
// Copyright (c) Microsoft Corporation.  All rights reserved.
//
// This source code is only intended as a supplement to the
// Microsoft Foundation Classes Reference and related
// electronic documentation provided with the library.
// See these sources for detailed information regarding the
// Microsoft Foundation Classes product.

/////////////////////////////////////////////////////////////////////
// BEGIN_DUAL_INTERFACE_PART is just like BEGIN_INTERFACE_PART,
// except that it also adds the IDispatch methods to your class
// declaration.
#define BEGIN_DUAL_INTERFACE_PART(localClass, baseClass) \
	BEGIN_INTERFACE_PART(localClass, baseClass) \
	   STDMETHOD(GetTypeInfoCount)(UINT FAR* pctinfo); \
	   STDMETHOD(GetTypeInfo)(UINT itinfo, LCID lcid, ITypeInfo FAR* FAR* pptinfo); \
	   STDMETHOD(GetIDsOfNames)(REFIID riid, OLECHAR FAR* FAR* rgszNames, UINT cNames, LCID lcid, DISPID FAR* rgdispid); \
	   STDMETHOD(Invoke)(DISPID dispidMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS FAR* pdispparams, VARIANT FAR* pvarResult, EXCEPINFO FAR* pexcepinfo, UINT FAR* puArgErr); \

/////////////////////////////////////////////////////////////////////
// END_DUAL_INTERFACE_PART is just like END_INTERFACE_PART. It
// is only added for symmetry...
#define END_DUAL_INTERFACE_PART(localClass) \
	END_INTERFACE_PART(localClass) \



/////////////////////////////////////////////////////////////////////
// DELEGATE_DUAL_INTERFACE expands to define the standard IDispatch
// methods for a dual interface, delegating back to the default
// MFC implementation
#define DELEGATE_DUAL_INTERFACE(objectClass, dualClass) \
	STDMETHODIMP_(ULONG) objectClass::X##dualClass::AddRef() \
	{ \
		METHOD_PROLOGUE(objectClass, dualClass) \
		return pThis->ExternalAddRef(); \
	} \
	STDMETHODIMP_(ULONG) objectClass::X##dualClass::Release() \
	{ \
		METHOD_PROLOGUE(objectClass, dualClass) \
		return pThis->ExternalRelease(); \
	} \
	STDMETHODIMP objectClass::X##dualClass::QueryInterface( \
		REFIID iid, LPVOID* ppvObj) \
	{ \
		METHOD_PROLOGUE(objectClass, dualClass) \
		return pThis->ExternalQueryInterface(&iid, ppvObj); \
	} \
	STDMETHODIMP objectClass::X##dualClass::GetTypeInfoCount( \
		UINT FAR* pctinfo) \
	{ \
		METHOD_PROLOGUE(objectClass, dualClass) \
		LPDISPATCH lpDispatch = pThis->GetIDispatch(FALSE); \
		ASSERT(lpDispatch != NULL); \
		return lpDispatch->GetTypeInfoCount(pctinfo); \
	} \
	STDMETHODIMP objectClass::X##dualClass::GetTypeInfo( \
		UINT itinfo, LCID lcid, ITypeInfo FAR* FAR* pptinfo) \
	{ \
		METHOD_PROLOGUE(objectClass, dualClass) \
		LPDISPATCH lpDispatch = pThis->GetIDispatch(FALSE); \
		ASSERT(lpDispatch != NULL); \
		return lpDispatch->GetTypeInfo(itinfo, lcid, pptinfo); \
	} \
	STDMETHODIMP objectClass::X##dualClass::GetIDsOfNames( \
		REFIID riid, OLECHAR FAR* FAR* rgszNames, UINT cNames, \
		LCID lcid, DISPID FAR* rgdispid) \
	{ \
		METHOD_PROLOGUE(objectClass, dualClass) \
		LPDISPATCH lpDispatch = pThis->GetIDispatch(FALSE); \
		ASSERT(lpDispatch != NULL); \
		return lpDispatch->GetIDsOfNames(riid, rgszNames, cNames, \
										 lcid, rgdispid); \
	} \
	STDMETHODIMP objectClass::X##dualClass::Invoke( \
		DISPID dispidMember, REFIID riid, LCID lcid, WORD wFlags, \
		DISPPARAMS FAR* pdispparams, VARIANT FAR* pvarResult, \
		EXCEPINFO FAR* pexcepinfo, UINT FAR* puArgErr) \
	{ \
		METHOD_PROLOGUE(objectClass, dualClass) \
		LPDISPATCH lpDispatch = pThis->GetIDispatch(FALSE); \
		ASSERT(lpDispatch != NULL); \
		return lpDispatch->Invoke(dispidMember, riid, lcid, \
								  wFlags, pdispparams, pvarResult, \
								  pexcepinfo, puArgErr); \
	} \



/////////////////////////////////////////////////////////////////////
// TRY_DUAL and CATCH_ALL_DUAL are used to provide exception handling
// for your dual interface methods. CATCH_ALL_DUAL takes care of
// returning the appropriate error code.

#define TRY_DUAL(iidSource) \
	HRESULT _hr = S_OK; \
	REFIID  _riidSource = iidSource; \
	TRY \

#define CATCH_ALL_DUAL \
	CATCH(COleException, e) \
	{ \
		_hr = e->m_sc; \
	} \
	AND_CATCH_ALL(e) \
	{ \
		AFX_MANAGE_STATE(pThis->m_pModuleState); \
		_hr = DualHandleException(_riidSource, e); \
	} \
	END_CATCH_ALL \
	return _hr; \

/////////////////////////////////////////////////////////////////////
// DualHandleException is a helper function used to set the system's
// error object, so that container applications that call through
// VTBLs can retrieve rich error information
HRESULT DualHandleException(REFIID riidSource, const CException* pAnyException);

/////////////////////////////////////////////////////////////////////
// DECLARE_DUAL_ERRORINFO expands to declare the ISupportErrorInfo
// support class. It works together with DUAL_ERRORINFO_PART and
// IMPLEMENT_DUAL_ERRORINFO defined below.
#define DECLARE_DUAL_ERRORINFO() \
	BEGIN_INTERFACE_PART(SupportErrorInfo, ISupportErrorInfo) \
		STDMETHOD(InterfaceSupportsErrorInfo)(THIS_ REFIID riid); \
	END_INTERFACE_PART(SupportErrorInfo) \

/////////////////////////////////////////////////////////////////////
// DUAL_ERRORINFO_PART adds the appropriate entry to the interface map
// for ISupportErrorInfo, if you used DECLARE_DUAL_ERRORINFO.
#define DUAL_ERRORINFO_PART(objectClass) \
	INTERFACE_PART(objectClass, IID_ISupportErrorInfo, SupportErrorInfo) \

/////////////////////////////////////////////////////////////////////
// IMPLEMENT_DUAL_ERRORINFO expands to an implementation of
// ISupportErrorInfo which matches the declaration in
// DECLARE_DUAL_ERRORINFO.
#define IMPLEMENT_DUAL_ERRORINFO(objectClass, riidSource) \
	STDMETHODIMP_(ULONG) objectClass::XSupportErrorInfo::AddRef() \
	{ \
		METHOD_PROLOGUE(objectClass, SupportErrorInfo) \
		return pThis->ExternalAddRef(); \
	} \
	STDMETHODIMP_(ULONG) objectClass::XSupportErrorInfo::Release() \
	{ \
		METHOD_PROLOGUE(objectClass, SupportErrorInfo) \
		return pThis->ExternalRelease(); \
	} \
	STDMETHODIMP objectClass::XSupportErrorInfo::QueryInterface( \
		REFIID iid, LPVOID* ppvObj) \
	{ \
		METHOD_PROLOGUE(objectClass, SupportErrorInfo) \
		return pThis->ExternalQueryInterface(&iid, ppvObj); \
	} \
	STDMETHODIMP objectClass::XSupportErrorInfo::InterfaceSupportsErrorInfo( \
		REFIID iid) \
	{ \
		METHOD_PROLOGUE(objectClass, SupportErrorInfo) \
		return (iid == riidSource) ? S_OK : S_FALSE; \
	}



/////////////////////////////////////////////////////////////////////

Index: GME.dsp
===================================================================
RCS file: /var/lib/gme/GMESRC/GME/Gme/GME.dsp,v
retrieving revision 1.89
retrieving revision 1.90
diff -C2 -d -r1.89 -r1.90
*** GME.dsp	19 Jul 2004 17:19:29 -0000	1.89
--- GME.dsp	22 Jul 2004 14:05:36 -0000	1.90
***************
*** 182,201 ****
  # Begin Source File
  
- SOURCE=.\GME.odl
- 
- !IF  "$(CFG)" == "GME - Win32 Release"
- 
- # ADD MTL /I "..\Interfaces" /h "GMEAppi.h" /iid "GMEApp_i.c"
- 
- !ELSEIF  "$(CFG)" == "GME - Win32 Debug"
- 
- # ADD MTL /I "..\Interfaces" /h "GMEAppi.h" /iid "GMEApp_i.c"
- # SUBTRACT MTL /Oicf
- 
- !ENDIF 
- 
- # End Source File
- # Begin Source File
- 
  SOURCE=.\GME.rc
  # End Source File
--- 182,185 ----
***************
*** 296,299 ****
--- 280,287 ----
  # Begin Source File
  
+ SOURCE=.\mfcdual.cpp
+ # End Source File
+ # Begin Source File
+ 
  SOURCE=.\MgaOpenDlg.cpp
  # End Source File
***************
*** 529,532 ****
--- 517,524 ----
  # Begin Source File
  
+ SOURCE=.\mfcdual.h
+ # End Source File
+ # Begin Source File
+ 
  SOURCE=.\MgaOpenDlg.h
  # End Source File
***************
*** 809,822 ****
  # End Target
  # End Project
- # Section GME : {72ADFD7B-2C39-11D0-9903-00A0C91BC942}
- # 	1:17:ID_INDICATOR_TIME:103
- # 	2:2:BH:
- # 	2:17:ID_INDICATOR_TIME:ID_INDICATOR_TIME
- # End Section
- # Section GME : {B718CCF7-5055-40DD-9CBD-AB17F72AB113}
- # 	2:5:Class:CSearch
- # 	2:10:HeaderFile:search.h
- # 	2:8:ImplFile:search.cpp
- # End Section
  # Section GME : {72ADFD78-2C39-11D0-9903-00A0C91BC942}
  # 	1:10:IDB_SPLASH:112
--- 801,804 ----
***************
*** 837,846 ****
  # 	2:8:ImplFile:activebrowser.cpp
  # End Section
  # Section GME : {B786F53C-297F-4DB8-8060-D45057217AEE}
  # 	2:21:DefaultSinkHeaderFile:objectinspector.h
  # 	2:16:DefaultSinkClass:CObjectInspector
  # End Section
! # Section GME : {5C402C8B-C848-11D3-9A6E-00902721DB65}
! # 	2:21:DefaultSinkHeaderFile:activebrowser.h
! # 	2:16:DefaultSinkClass:CActiveBrowser
  # End Section
--- 819,838 ----
  # 	2:8:ImplFile:activebrowser.cpp
  # End Section
+ # Section GME : {5C402C8B-C848-11D3-9A6E-00902721DB65}
+ # 	2:21:DefaultSinkHeaderFile:activebrowser.h
+ # 	2:16:DefaultSinkClass:CActiveBrowser
+ # End Section
  # Section GME : {B786F53C-297F-4DB8-8060-D45057217AEE}
  # 	2:21:DefaultSinkHeaderFile:objectinspector.h
  # 	2:16:DefaultSinkClass:CObjectInspector
  # End Section
! # Section GME : {B718CCF7-5055-40DD-9CBD-AB17F72AB113}
! # 	2:5:Class:CSearch
! # 	2:10:HeaderFile:search.h
! # 	2:8:ImplFile:search.cpp
! # End Section
! # Section GME : {72ADFD7B-2C39-11D0-9903-00A0C91BC942}
! # 	1:17:ID_INDICATOR_TIME:103
! # 	2:2:BH:
! # 	2:17:ID_INDICATOR_TIME:ID_INDICATOR_TIME
  # End Section

Index: GMEApp.cpp
===================================================================
RCS file: /var/lib/gme/GMESRC/GME/Gme/GMEApp.cpp,v
retrieving revision 1.119
retrieving revision 1.120
diff -C2 -d -r1.119 -r1.120
*** GMEApp.cpp	20 Jul 2004 16:01:34 -0000	1.119
--- GMEApp.cpp	22 Jul 2004 14:05:36 -0000	1.120
***************
*** 5,13 ****
  #include "GMEApp.h"
  
! #include "GMEAppi.h"
! #include "GMEApp_i.c"
  #include "Gme_i.c"
  #include "GmeLib_i.c"
  #include "../Mga/MgaLib_i.c"
  
  #include "GMEstd.h"
--- 5,13 ----
  #include "GMEApp.h"
  
! 
  #include "Gme_i.c"
  #include "GmeLib_i.c"
  #include "../Mga/MgaLib_i.c"
+ #include "Parser.h"
  
  #include "GMEstd.h"
***************
*** 36,39 ****
--- 36,40 ----
  // ATL ///////////////////////////////////////////////////////////////////////////
  #include "mga_i.c"
+ #include "meta_i.c"
  #include "Splash.h"
  CComModule _Module;
***************
*** 135,139 ****
  		}
  		else if(bFlag && !strcmp(pszParam, "UNREGSERVER")) {
! 			HRESULT hr = UnRegisterTypeLib(LIBID_GmeLib, 1, 0, LANG_NEUTRAL, SYS_WIN32);
  			if(hr == S_OK) { AfxMessageBox("Unregistered"); exit(0); }
  			else { AfxMessageBox("Unregistration error: " + hr); exit(-1); }
--- 136,140 ----
  		}
  		else if(bFlag && !strcmp(pszParam, "UNREGSERVER")) {
! 			HRESULT hr = UnRegisterTypeLib(LIBID_GMELib, 1, 0, LANG_NEUTRAL, SYS_WIN32);
  			if(hr == S_OK) { AfxMessageBox("Unregistered"); exit(0); }
  			else { AfxMessageBox("Unregistration error: " + hr); exit(-1); }
***************
*** 305,308 ****
--- 306,312 ----
  	// PETER: It works only with administrator priviledges
  	// COleObjectFactory::UpdateRegistryAll();
+ 	
+ 	// Make sure the type library is registered or dual interface won't work.
+ 	// AfxOleRegisterTypeLib(AfxGetInstanceHandle(), LIBID_GMELib);
  
  	// We don't want a new document at startup

Index: GMEOLEApp.cpp
===================================================================
RCS file: /var/lib/gme/GMESRC/GME/Gme/GMEOLEApp.cpp,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -d -r1.4 -r1.5
*** GMEOLEApp.cpp	25 Mar 2004 16:45:06 -0000	1.4
--- GMEOLEApp.cpp	22 Jul 2004 14:05:36 -0000	1.5
***************
*** 4,7 ****
--- 4,8 ----
  #include "stdafx.h"
  #include "gme.h"
+ #include "parser.h"
  #include "GMEOLEApp.h"
  #include "GMEOLEError.h"
***************
*** 22,25 ****
--- 23,43 ----
  #endif
  
+ CSingletonFactory::CSingletonFactory(REFCLSID clsid, 
+ 									 CRuntimeClass* pRuntimeClass,
+                                      BOOL bMultiInstance, 
+ 									 LPCTSTR lpszProgID):
+                 COleObjectFactory(clsid, pRuntimeClass, bMultiInstance, lpszProgID),
+                 singleton(NULL)
+ {
+ }
+ 
+ CCmdTarget* CSingletonFactory::OnCreateObject()
+ {
+     if (singleton == NULL) {
+ 		singleton = COleObjectFactory::OnCreateObject();
+     }
+ 
+     return singleton;
+ }
  
  /////////////////////////////////////////////////////////////////////////////
***************
*** 105,118 ****
  //  dispinterface in the .ODL file.
  
! // {071032EC-7E70-428E-9C5F-BA3BC3A20FB4}
! static const IID IID_IGMEOLEApp =
! { 0x71032ec, 0x7e70, 0x428e, { 0x9c, 0x5f, 0xba, 0x3b, 0xc3, 0xa2, 0xf, 0xb4 } };
  
  BEGIN_INTERFACE_MAP(CGMEOLEApp, CCmdTarget)
! 	INTERFACE_PART(CGMEOLEApp, IID_IGMEOLEApp, Dispatch)
  END_INTERFACE_MAP()
  
! // {013F78DC-2435-4086-B3CF-63D402DD7141}
! IMPLEMENT_OLECREATE(CGMEOLEApp, "GME.Application", 0x13f78dc, 0x2435, 0x4086, 0xb3, 0xcf, 0x63, 0xd4, 0x2, 0xdd, 0x71, 0x41)
  
  /////////////////////////////////////////////////////////////////////////////
--- 123,138 ----
  //  dispinterface in the .ODL file.
  
! // {81191A44-B898-4143-BF8B-CA7501FEC19A}
! //static const IID_IGMEOLEApp = 
! //{ 0x81191a44, 0xb898, 0x4143, { 0xbf, 0x8b, 0xca, 0x75, 0x1, 0xfe, 0xc1, 0x9a } };
! 
  
  BEGIN_INTERFACE_MAP(CGMEOLEApp, CCmdTarget)
! 	INTERFACE_PART(CGMEOLEApp, IID_IGMEOLEApp, Dual)
! 	DUAL_ERRORINFO_PART(CGMEOLEApp)
  END_INTERFACE_MAP()
  
! // {C7DCCC2E-1642-4a40-8060-51A7B9FAE488}
! IMPLEMENT_OLESINGLECREATE(CGMEOLEApp, "GME.Application", 0xC7DCCC2E, 0x1642, 0x4a40, 0x80, 0x60, 0x51, 0xA7, 0xB9, 0xFA, 0xE4, 0x88)
  
  /////////////////////////////////////////////////////////////////////////////
***************
*** 556,557 ****
--- 576,1005 ----
  	SetNotSupported();
  }
+ 
+ DELEGATE_DUAL_INTERFACE(CGMEOLEApp, Dual)
+ 
+ // Implement ISupportErrorInfo to indicate we support the
+ // OLE Automation error handler.
+ IMPLEMENT_DUAL_ERRORINFO(CGMEOLEApp, IID_IGMEOLEApp)
+ 
+ STDMETHODIMP CGMEOLEApp::XDual::put_Visible( VARIANT_BOOL isVisible)
+ {
+ 	METHOD_PROLOGUE(CGMEOLEApp, Dual)
+ 
+ 	TRY_DUAL(IID_IGMEOLEApp)
+ 	{
+ 		pThis->SetVisible(isVisible);
+ 		return NOERROR;
+ 	}
+ 	CATCH_ALL_DUAL
+ }
+ 
+ 
+ STDMETHODIMP CGMEOLEApp::XDual::get_Visible( VARIANT_BOOL* isVisible)
+ {
+ 	METHOD_PROLOGUE(CGMEOLEApp, Dual)
+ 
+ 	TRY_DUAL(IID_IGMEOLEApp)
+ 	{
+ #pragma warning(disable: 4310) // cast truncates constant value
+ 		*isVisible = (pThis->GetVisible() == FALSE) ? VARIANT_FALSE : VARIANT_TRUE;
+ #pragma warning(default: 4310) // cast truncates constant value
+ 		return NOERROR;
+ 	}
+ 	CATCH_ALL_DUAL
+ }
+ 
+ STDMETHODIMP CGMEOLEApp::XDual::get_Version( BSTR* versionStr)
+ {
+ 	METHOD_PROLOGUE(CGMEOLEApp, Dual)
+ 
+ 	TRY_DUAL(IID_IGMEOLEApp)
+ 	{
+ 		CString str = pThis->GetVersion();
+ 		str.SetSysString(versionStr);
+ 		return NOERROR;
+ 	}
+ 	CATCH_ALL_DUAL
+ }
+ 
+ STDMETHODIMP CGMEOLEApp::XDual::get_VersionMajor( short* n)
+ {
+ 	METHOD_PROLOGUE(CGMEOLEApp, Dual)
+ 
+ 	TRY_DUAL(IID_IGMEOLEApp)
+ 	{
+ 		*n = pThis->GetVersionMajor();
+ 		return NOERROR;
+ 	}
+ 	CATCH_ALL_DUAL
+ }
+ 
+ STDMETHODIMP CGMEOLEApp::XDual::get_VersionMinor( short* n)
+ {
+ 	METHOD_PROLOGUE(CGMEOLEApp, Dual)
+ 
+ 	TRY_DUAL(IID_IGMEOLEApp)
+ 	{
+ 		*n = pThis->GetVersionMinor();
+ 		return NOERROR;
+ 	}
+ 	CATCH_ALL_DUAL
+ }
+ 
+ STDMETHODIMP CGMEOLEApp::XDual::get_VersionPatchLevel( short* n)
+ {
+ 	METHOD_PROLOGUE(CGMEOLEApp, Dual)
+ 
+ 	TRY_DUAL(IID_IGMEOLEApp)
+ 	{
+ 		*n = pThis->GetVersionPatchLevel();
+ 		return NOERROR;
+ 	}
+ 	CATCH_ALL_DUAL
+ }
+ 
+ STDMETHODIMP CGMEOLEApp::XDual::get_Models( IGMEOLEColl** coll)
+ {
+ 	METHOD_PROLOGUE(CGMEOLEApp, Dual)
+ 
+ 	TRY_DUAL(IID_IGMEOLEApp)
+ 	{
+ 		LPDISPATCH lpDisp = pThis->GetModels();
+ 		lpDisp->QueryInterface(IID_IGMEOLEColl, (LPVOID*)coll);
+ 		return NOERROR;
+ 	}
+ 	CATCH_ALL_DUAL
+ }
+ 
+ STDMETHODIMP CGMEOLEApp::XDual::get_MgaProject( IMgaProject** project)
+ {
+ 	METHOD_PROLOGUE(CGMEOLEApp, Dual)
+ 
+ 	TRY_DUAL(IID_IGMEOLEApp)
+ 	{
+ 		LPDISPATCH lpDisp = pThis->GetMgaProject();
+ 		lpDisp->QueryInterface(IID_IMgaProject, (LPVOID*)project);
+ 		return NOERROR;
+ 	}
+ 	CATCH_ALL_DUAL
+ }
+ 
+ STDMETHODIMP CGMEOLEApp::XDual::get_Panels( IGMEOLEColl** coll)
+ {
+ 	METHOD_PROLOGUE(CGMEOLEApp, Dual)
+ 
+ 	TRY_DUAL(IID_IGMEOLEApp)
+ 	{
+ 		LPDISPATCH lpDisp = pThis->GetPanels();
+ 		lpDisp->QueryInterface(IID_IGMEOLEColl, (LPVOID*)coll);
+ 		return NOERROR;
+ 	}
+ 	CATCH_ALL_DUAL
+ }
+ 
+ STDMETHODIMP CGMEOLEApp::XDual::CreateProject( BSTR metaname, BSTR connstr)
+ {
+ 	METHOD_PROLOGUE(CGMEOLEApp, Dual)
+ 
+ 	TRY_DUAL(IID_IGMEOLEApp)
+ 	{
+ 		pThis->CreateProject(CString(metaname), CString(connstr));
+ 		return NOERROR;
+ 	}
+ 	CATCH_ALL_DUAL
+ }
+ 
+ STDMETHODIMP CGMEOLEApp::XDual::OpenProject( BSTR connstr)
+ {
+ 	METHOD_PROLOGUE(CGMEOLEApp, Dual)
+ 
+ 	TRY_DUAL(IID_IGMEOLEApp)
+ 	{
+ 		pThis->OpenProject(CString(connstr));
+ 		return NOERROR;
+ 	}
+ 	CATCH_ALL_DUAL
+ }
+ 
+ STDMETHODIMP CGMEOLEApp::XDual::CreateProjectDialog()
+ {
+ 	METHOD_PROLOGUE(CGMEOLEApp, Dual)
+ 
+ 	TRY_DUAL(IID_IGMEOLEApp)
+ 	{
+ 		pThis->CreateProjectDialog();
+ 		return NOERROR;
+ 	}
+ 	CATCH_ALL_DUAL
+ }
+ 
+ STDMETHODIMP CGMEOLEApp::XDual::OpenProjectDialog()
+ {
+ 	METHOD_PROLOGUE(CGMEOLEApp, Dual)
+ 
+ 	TRY_DUAL(IID_IGMEOLEApp)
+ 	{
+ 		pThis->OpenProjectDialog();
+ 		return NOERROR;
+ 	}
+ 	CATCH_ALL_DUAL
+ }
+ 
+ STDMETHODIMP CGMEOLEApp::XDual::CloseProject( VARIANT_BOOL saveOnClose)
+ {
+ 	METHOD_PROLOGUE(CGMEOLEApp, Dual)
+ 
+ 	TRY_DUAL(IID_IGMEOLEApp)
+ 	{
+ 		pThis->CloseProject(saveOnClose);
+ 		return NOERROR;
+ 	}
+ 	CATCH_ALL_DUAL
+ }
+ 
+ STDMETHODIMP CGMEOLEApp::XDual::SaveProject()
+ {
+ 	METHOD_PROLOGUE(CGMEOLEApp, Dual)
+ 
+ 	TRY_DUAL(IID_IGMEOLEApp)
+ 	{
+ 		pThis->SaveProject();
+ 		return NOERROR;
+ 	}
+ 	CATCH_ALL_DUAL
+ }
+ 
+ 
+ STDMETHODIMP CGMEOLEApp::XDual::SaveProjectAs( BSTR connstr)
+ {
+ 	METHOD_PROLOGUE(CGMEOLEApp, Dual)
+ 
+ 	TRY_DUAL(IID_IGMEOLEApp)
+ 	{
+ 		pThis->SaveProjectAs(CString(connstr));
+ 		return NOERROR;
+ 	}
+ 	CATCH_ALL_DUAL
+ }
+ 
+ STDMETHODIMP CGMEOLEApp::XDual::SaveProjectAsDialog()
+ {
+ 	METHOD_PROLOGUE(CGMEOLEApp, Dual)
+ 
+ 	TRY_DUAL(IID_IGMEOLEApp)
+ 	{
+ 		pThis->SaveProjectAsDialog();
+ 		return NOERROR;
+ 	}
+ 	CATCH_ALL_DUAL
+ }
+ 
+ 
+ STDMETHODIMP CGMEOLEApp::XDual::ExportProject( BSTR connstr)
+ {
+ 	METHOD_PROLOGUE(CGMEOLEApp, Dual)
+ 
+ 	TRY_DUAL(IID_IGMEOLEApp)
+ 	{
+ 		pThis->ExportProject(CString(connstr));
+ 		return NOERROR;
+ 	}
+ 	CATCH_ALL_DUAL
+ }
+ 
+ STDMETHODIMP CGMEOLEApp::XDual::ImportProject( BSTR connstr)
+ {
+ 	METHOD_PROLOGUE(CGMEOLEApp, Dual)
+ 
+ 	TRY_DUAL(IID_IGMEOLEApp)
+ 	{
+ 		pThis->ImportProject(CString(connstr));
+ 		return NOERROR;
+ 	}
+ 	CATCH_ALL_DUAL
+ }
+ 
+ STDMETHODIMP CGMEOLEApp::XDual::ConstraintsDialog()
+ {
+ 	METHOD_PROLOGUE(CGMEOLEApp, Dual)
+ 
+ 	TRY_DUAL(IID_IGMEOLEApp)
+ 	{
+ 		pThis->ConstraintsDialog();
+ 		return NOERROR;
+ 	}
+ 	CATCH_ALL_DUAL
+ }
+ 
+ 
+ STDMETHODIMP CGMEOLEApp::XDual::CheckAllConstraints()
+ {
+ 	METHOD_PROLOGUE(CGMEOLEApp, Dual)
+ 
+ 	TRY_DUAL(IID_IGMEOLEApp)
+ 	{
+ 		pThis->CheckAllConstraints();
+ 		return NOERROR;
+ 	}
+ 	CATCH_ALL_DUAL
+ }
+ 
+ 
+ STDMETHODIMP CGMEOLEApp::XDual::RegisterParagimsDialog()
+ {
+ 	METHOD_PROLOGUE(CGMEOLEApp, Dual)
+ 
+ 	TRY_DUAL(IID_IGMEOLEApp)
+ 	{
+ 		pThis->RegisterParagimsDialog();
+ 		return NOERROR;
+ 	}
+ 	CATCH_ALL_DUAL
+ }
+ 
+ 
+ STDMETHODIMP CGMEOLEApp::XDual::RegisterComponentsDialog()
+ {
+ 	METHOD_PROLOGUE(CGMEOLEApp, Dual)
+ 
+ 	TRY_DUAL(IID_IGMEOLEApp)
+ 	{
+ 		pThis->RegisterComponentsDialog();
+ 		return NOERROR;
+ 	}
+ 	CATCH_ALL_DUAL
+ }
+ 
+ 
+ STDMETHODIMP CGMEOLEApp::XDual::RunComponent( BSTR progID)
+ {
+ 	METHOD_PROLOGUE(CGMEOLEApp, Dual)
+ 
+ 	TRY_DUAL(IID_IGMEOLEApp)
+ 	{
+ 		pThis->RunComponent(CString(progID));
+ 		return NOERROR;
+ 	}
+ 	CATCH_ALL_DUAL
+ }
+ 
+ 
+ STDMETHODIMP CGMEOLEApp::XDual::RunComponentDialog()
+ {
+ 	METHOD_PROLOGUE(CGMEOLEApp, Dual)
+ 
+ 	TRY_DUAL(IID_IGMEOLEApp)
+ 	{
+ 		pThis->RunComponentDialog();
+ 		return NOERROR;
+ 	}
+ 	CATCH_ALL_DUAL
+ }
+ 
+ 
+ STDMETHODIMP CGMEOLEApp::XDual::SettingsDialog()
+ {
+ 	METHOD_PROLOGUE(CGMEOLEApp, Dual)
+ 
+ 	TRY_DUAL(IID_IGMEOLEApp)
+ 	{
+ 		pThis->SettingsDialog();
+ 		return NOERROR;
+ 	}
+ 	CATCH_ALL_DUAL
+ }
+ 
+ 
+ STDMETHODIMP CGMEOLEApp::XDual::Undo()
+ {
+ 	METHOD_PROLOGUE(CGMEOLEApp, Dual)
+ 
+ 	TRY_DUAL(IID_IGMEOLEApp)
+ 	{
+ 		pThis->Undo();
+ 		return NOERROR;
+ 	}
+ 	CATCH_ALL_DUAL
+ }
+ 
+ 
+ STDMETHODIMP CGMEOLEApp::XDual::Redo()
+ {
+ 	METHOD_PROLOGUE(CGMEOLEApp, Dual)
+ 
+ 	TRY_DUAL(IID_IGMEOLEApp)
+ 	{
+ 		pThis->Redo();
+ 		return NOERROR;
+ 	}
+ 	CATCH_ALL_DUAL
+ }
+ 
+ 
+ STDMETHODIMP CGMEOLEApp::XDual::ClearUndoQueue()
+ {
+ 	METHOD_PROLOGUE(CGMEOLEApp, Dual)
+ 
+ 	TRY_DUAL(IID_IGMEOLEApp)
+ 	{
+ 		pThis->ClearUndoQueue();
+ 		return NOERROR;
+ 	}
+ 	CATCH_ALL_DUAL
+ }
+ 
+ 
+ STDMETHODIMP CGMEOLEApp::XDual::ProjectPropertiesDialog()
+ {
+ 	METHOD_PROLOGUE(CGMEOLEApp, Dual)
+ 
+ 	TRY_DUAL(IID_IGMEOLEApp)
+ 	{
+ 		pThis->ProjectPropertiesDialog();
+ 		return NOERROR;
+ 	}
+ 	CATCH_ALL_DUAL
+ }
+ 
+ 
+ STDMETHODIMP CGMEOLEApp::XDual::ShowHelpContents()
+ {
+ 	METHOD_PROLOGUE(CGMEOLEApp, Dual)
+ 
+ 	TRY_DUAL(IID_IGMEOLEApp)
+ 	{
+ 		pThis->ShowHelpContents();
+ 		return NOERROR;
+ 	}
+ 	CATCH_ALL_DUAL
+ }
+ 
+ 
+ STDMETHODIMP CGMEOLEApp::XDual::ShowAbout()
+ {
+ 	METHOD_PROLOGUE(CGMEOLEApp, Dual)
+ 
+ 	TRY_DUAL(IID_IGMEOLEApp)
+ 	{
+ 		pThis->ShowAbout();
+ 		return NOERROR;
+ 	}
+ 	CATCH_ALL_DUAL
+ }
+ 
+ 
+ STDMETHODIMP CGMEOLEApp::XDual::ShowFCO( IMgaFCO* mgaFCO)
+ {
+ 	METHOD_PROLOGUE(CGMEOLEApp, Dual)
+ 
+ 	TRY_DUAL(IID_IGMEOLEApp)
+ 	{
+ 		LPDISPATCH lpDisp = NULL;
+ 		mgaFCO->QueryInterface(IID_IDispatch, (LPVOID*)&lpDisp);
+ 		pThis->ShowFCO(lpDisp);
+ 		lpDisp->Release();
+ 		return NOERROR;
+ 	}
+ 	CATCH_ALL_DUAL
+ }
+ 

Index: GMEOLEApp.h
===================================================================
RCS file: /var/lib/gme/GMESRC/GME/Gme/GMEOLEApp.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** GMEOLEApp.h	17 Dec 2003 13:45:02 -0000	1.1
--- GMEOLEApp.h	22 Jul 2004 14:05:36 -0000	1.2
***************
*** 9,12 ****
--- 9,32 ----
  
  
+ class CSingletonFactory: public COleObjectFactory
+ {
+ public:
+     CSingletonFactory(REFCLSID clsid, CRuntimeClass* pRuntimeClass,
+         BOOL bMultiInstance, LPCTSTR lpszProgID);
+     virtual CCmdTarget* OnCreateObject();
+ private:
+     CCmdTarget* singleton;
+ };
+ 
+ #define DECLARE_OLESINGLECREATE(class_name) \
+ public: \
+     static AFX_DATA CSingletonFactory factory; \
+     static AFX_DATA const GUID guid; \
+ 
+ #define IMPLEMENT_OLESINGLECREATE(class_name, external_name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
+     AFX_DATADEF CSingletonFactory class_name::factory(class_name::guid, \
+         RUNTIME_CLASS(class_name), FALSE, _T(external_name)); \
+     AFX_COMDAT const AFX_DATADEF GUID class_name::guid = \
+         { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } }; \
  
  /////////////////////////////////////////////////////////////////////////////
***************
*** 26,34 ****
  
  // Overrides
! 	// ClassWizard generated virtual function overrides
! 	//{{AFX_VIRTUAL(CGMEOLEApp)
! 	public:
  	virtual void OnFinalRelease();
! 	//}}AFX_VIRTUAL
  
  // Implementation
--- 46,52 ----
  
  // Overrides
! public:
  	virtual void OnFinalRelease();
! 
  
  // Implementation
***************
*** 42,49 ****
  
  	DECLARE_MESSAGE_MAP()
! 	DECLARE_OLECREATE(CGMEOLEApp)
  
! 	// Generated OLE dispatch map functions
! 	//{{AFX_DISPATCH(CGMEOLEApp)
  	afx_msg BOOL GetVisible();
  	afx_msg void SetVisible(BOOL bNewValue);
--- 60,66 ----
  
  	DECLARE_MESSAGE_MAP()
! 	DECLARE_OLESINGLECREATE(CGMEOLEApp)
  
! 	// OLE dispatch map functions
  	afx_msg BOOL GetVisible();
  	afx_msg void SetVisible(BOOL bNewValue);
***************
*** 86,92 ****
  	afx_msg void ShowAbout();
  	afx_msg void ShowFCO(LPDISPATCH mgaFCO);
! 	//}}AFX_DISPATCH
  	DECLARE_DISPATCH_MAP()
  	DECLARE_INTERFACE_MAP()
  };
  
--- 103,151 ----
  	afx_msg void ShowAbout();
  	afx_msg void ShowFCO(LPDISPATCH mgaFCO);
! 
! 
  	DECLARE_DISPATCH_MAP()
  	DECLARE_INTERFACE_MAP()
+ 
+ 	BEGIN_DUAL_INTERFACE_PART(Dual, IGMEOLEApp)
+ 		STDMETHOD(put_Visible)(THIS_ VARIANT_BOOL isVisible);
+ 		STDMETHOD(get_Visible)(THIS_ VARIANT_BOOL* isVisible);
+ 		STDMETHOD(get_Version)(THIS_ BSTR* versionStr);
+ 		STDMETHOD(get_VersionMajor)(THIS_ short* n);
+ 		STDMETHOD(get_VersionMinor)(THIS_ short* n);
+ 		STDMETHOD(get_VersionPatchLevel)(THIS_ short* n);
+ 		STDMETHOD(get_Models)(THIS_ IGMEOLEColl** coll);
+ 		STDMETHOD(get_MgaProject)(THIS_ IMgaProject** project);
+ 		STDMETHOD(get_Panels)(THIS_ IGMEOLEColl** coll);
+ 
+ 		STDMETHOD(CreateProject)(THIS_ BSTR metaname, BSTR connstr);
+ 		STDMETHOD(OpenProject)(THIS_ BSTR connstr);
+ 		STDMETHOD(CreateProjectDialog)(THIS);
+ 		STDMETHOD(OpenProjectDialog)(THIS);
+ 		STDMETHOD(CloseProject)(THIS_ VARIANT_BOOL saveOnClose);
+ 		STDMETHOD(SaveProject)(THIS);
+ 		STDMETHOD(SaveProjectAs)(THIS_ BSTR connstr);
+ 		STDMETHOD(SaveProjectAsDialog)(THIS);
+ 		STDMETHOD(ExportProject)(THIS_ BSTR connstr);
+ 		STDMETHOD(ImportProject)(THIS_ BSTR connstr);
+ 		STDMETHOD(ConstraintsDialog)(THIS);
+ 		STDMETHOD(CheckAllConstraints)(THIS);
+ 		STDMETHOD(RegisterParagimsDialog)(THIS);
+ 		STDMETHOD(RegisterComponentsDialog)(THIS);
+ 		STDMETHOD(RunComponent)(THIS_ BSTR progID);
+ 		STDMETHOD(RunComponentDialog)(THIS);
+ 		STDMETHOD(SettingsDialog)(THIS);
+ 		STDMETHOD(Undo)(THIS);
+ 		STDMETHOD(Redo)(THIS);
+ 		STDMETHOD(ClearUndoQueue)(THIS);
+ 		STDMETHOD(ProjectPropertiesDialog)(THIS);
+ 		STDMETHOD(ShowHelpContents)(THIS);
+ 		STDMETHOD(ShowAbout)(THIS);
+ 		STDMETHOD(ShowFCO)(THIS_ IMgaFCO* mgaFCO);
+ 	END_DUAL_INTERFACE_PART(Dual)
+ 
+ 	//     add declaration of ISupportErrorInfo implementation
+ 	//     to indicate we support the OLE Automation error object
+ 	DECLARE_DUAL_ERRORINFO()
  };
  

Index: GMEOLEAspect.cpp
===================================================================
RCS file: /var/lib/gme/GMESRC/GME/Gme/GMEOLEAspect.cpp,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** GMEOLEAspect.cpp	21 Jan 2004 15:08:49 -0000	1.2
--- GMEOLEAspect.cpp	22 Jul 2004 14:05:36 -0000	1.3
***************
*** 84,93 ****
  //  dispinterface in the .ODL file.
  
! // {17C67C9B-EB0E-4B86-BC11-C0D4D55A9C8B}
! static const IID IID_IGMEOLEAspect =
! { 0x17c67c9b, 0xeb0e, 0x4b86, { 0xbc, 0x11, 0xc0, 0xd4, 0xd5, 0x5a, 0x9c, 0x8b } };
  
  BEGIN_INTERFACE_MAP(CGMEOLEAspect, CCmdTarget)
! 	INTERFACE_PART(CGMEOLEAspect, IID_IGMEOLEAspect, Dispatch)
  END_INTERFACE_MAP()
  
--- 84,95 ----
  //  dispinterface in the .ODL file.
  
! // {EDEEB1F8-BC44-40d2-BE91-83E8CCD59845}
! //static const IID IID_IGMEOLEAspect = 
! //{ 0xedeeb1f8, 0xbc44, 0x40d2, { 0xbe, 0x91, 0x83, 0xe8, 0xcc, 0xd5, 0x98, 0x45 } };
! 
  
  BEGIN_INTERFACE_MAP(CGMEOLEAspect, CCmdTarget)
! 	INTERFACE_PART(CGMEOLEAspect, IID_IGMEOLEAspect, Dual)
! 	DUAL_ERRORINFO_PART(CGMEOLEAspect)
  END_INTERFACE_MAP()
  
***************
*** 147,149 ****
--- 149,210 ----
  	SetNotSupported();
  
+ }
+ 
+ DELEGATE_DUAL_INTERFACE(CGMEOLEAspect, Dual)
+ 
+ // Implement ISupportErrorInfo to indicate we support the
+ // OLE Automation error handler.
+ IMPLEMENT_DUAL_ERRORINFO(CGMEOLEAspect, IID_IGMEOLEAspect)
+ 
+ STDMETHODIMP CGMEOLEAspect::XDual::get_MgaAspect(IMgaMetaAspect** aspect)
+ {
+ 	METHOD_PROLOGUE(CGMEOLEAspect, Dual)
+ 
+ 	TRY_DUAL(IID_IGMEOLEAspect)
+ 	{
+ 		LPDISPATCH lpDisp = pThis->GetMgaAspect();
+ 		lpDisp->QueryInterface(IID_IMgaMetaAspect, (LPVOID*)aspect);
+ 		return NOERROR;
+ 	}
+ 	CATCH_ALL_DUAL
+ }
+ 
+ STDMETHODIMP CGMEOLEAspect::XDual::put_Active(VARIANT_BOOL isActive)
+ {
+ 	METHOD_PROLOGUE(CGMEOLEAspect, Dual)
+ 
+ 	TRY_DUAL(IID_IGMEOLEAspect)
+ 	{
+ 		pThis->SetActive(isActive);
+ 		return NOERROR;
+ 	}
+ 	CATCH_ALL_DUAL
+ }
+ 
+ STDMETHODIMP CGMEOLEAspect::XDual::get_Active(VARIANT_BOOL* isActive)
+ {
+ 	METHOD_PROLOGUE(CGMEOLEAspect, Dual)
+ 
+ 	TRY_DUAL(IID_IGMEOLEAspect)
+ 	{
+ #pragma warning(disable: 4310) // cast truncates constant value
+ 		*isActive = (pThis->GetActive() == FALSE) ? VARIANT_FALSE : VARIANT_TRUE;
+ #pragma warning(default: 4310) // cast truncates constant value
+ 		return NOERROR;
+ 	}
+ 	CATCH_ALL_DUAL
+ }
+ 
+ STDMETHODIMP CGMEOLEAspect::XDual::get_Valid(VARIANT_BOOL* isValid)
+ {
+ 	METHOD_PROLOGUE(CGMEOLEAspect, Dual)
+ 
+ 	TRY_DUAL(IID_IGMEOLEAspect)
+ 	{
+ #pragma warning(disable: 4310) // cast truncates constant value
+ 		*isValid = (pThis->GetValid() == FALSE) ? VARIANT_FALSE : VARIANT_TRUE;
+ #pragma warning(default: 4310) // cast truncates constant value
+ 		return NOERROR;
+ 	}
+ 	CATCH_ALL_DUAL
  }

Index: GMEOLEAspect.h
===================================================================
RCS file: /var/lib/gme/GMESRC/GME/Gme/GMEOLEAspect.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** GMEOLEAspect.h	17 Dec 2003 13:45:02 -0000	1.1
--- GMEOLEAspect.h	22 Jul 2004 14:05:36 -0000	1.2
***************
*** 28,35 ****
  public:
  	void SetGuiParams(CGMEView *view, CGuiMetaAspect *guiAspect) { m_view = view; m_guiAspect = guiAspect; }
  // Overrides
! 	// ClassWizard generated virtual function overrides
! 	//{{AFX_VIRTUAL(CGMEOLEAspect)
! 	public:
  	virtual void OnFinalRelease();
  	//}}AFX_VIRTUAL
--- 28,34 ----
  public:
  	void SetGuiParams(CGMEView *view, CGuiMetaAspect *guiAspect) { m_view = view; m_guiAspect = guiAspect; }
+ 
  // Overrides
! public:
  	virtual void OnFinalRelease();
  	//}}AFX_VIRTUAL
***************
*** 49,54 ****
  
  	DECLARE_MESSAGE_MAP()
! 	// Generated OLE dispatch map functions
! 	//{{AFX_DISPATCH(CGMEOLEAspect)
  	afx_msg LPDISPATCH GetMgaAspect();
  	afx_msg void SetMgaAspect(LPDISPATCH newValue);
--- 48,52 ----
  
  	DECLARE_MESSAGE_MAP()
! 	// OLE dispatch map functions
  	afx_msg LPDISPATCH GetMgaAspect();
  	afx_msg void SetMgaAspect(LPDISPATCH newValue);
***************
*** 57,63 ****
  	afx_msg BOOL GetValid();
  	afx_msg void SetValid(BOOL bNewValue);
! 	//}}AFX_DISPATCH
  	DECLARE_DISPATCH_MAP()
  	DECLARE_INTERFACE_MAP()
  };
  
--- 55,72 ----
  	afx_msg BOOL GetValid();
  	afx_msg void SetValid(BOOL bNewValue);
! 
  	DECLARE_DISPATCH_MAP()
  	DECLARE_INTERFACE_MAP()
+ 
+ 	BEGIN_DUAL_INTERFACE_PART(Dual, IGMEOLEAspect)
+ 		STDMETHOD(get_MgaAspect)(THIS_ IMgaMetaAspect** aspect);
+ 		STDMETHOD(put_Active)(THIS_ VARIANT_BOOL isActive);
+ 		STDMETHOD(get_Active)(THIS_ VARIANT_BOOL* isActive);
+ 		STDMETHOD(get_Valid)(THIS_ VARIANT_BOOL* isValid);
+ 	END_DUAL_INTERFACE_PART(Dual)
+ 
+ 	//     add declaration of ISupportErrorInfo implementation
+ 	//     to indicate we support the OLE Automation error object
+ 	DECLARE_DUAL_ERRORINFO()
  };
  

Index: GMEOLEColl.cpp
===================================================================
RCS file: /var/lib/gme/GMESRC/GME/Gme/GMEOLEColl.cpp,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** GMEOLEColl.cpp	18 Dec 2003 13:28:41 -0000	1.2
--- GMEOLEColl.cpp	22 Jul 2004 14:05:36 -0000	1.3
***************
*** 57,63 ****
  	//{{AFX_DISPATCH_MAP(CGMEOLEColl)
  	DISP_PROPERTY_EX(CGMEOLEColl, "Count", GetCount, SetNotSupported, VT_I4)
! 	DISP_FUNCTION(CGMEOLEColl, "Add", Add, VT_I4, VTS_DISPATCH)
  	DISP_FUNCTION(CGMEOLEColl, "Find", Find, VT_I4, VTS_DISPATCH)
! 	DISP_FUNCTION(CGMEOLEColl, "Remove", Remove, VT_I4, VTS_VARIANT)
  	DISP_FUNCTION(CGMEOLEColl, "RemoveAll", RemoveAll, VT_EMPTY, VTS_NONE)
  	DISP_PROPERTY_PARAM(CGMEOLEColl, "Item", GetItem, SetItem, VT_DISPATCH, VTS_I4)
--- 57,63 ----
  	//{{AFX_DISPATCH_MAP(CGMEOLEColl)
  	DISP_PROPERTY_EX(CGMEOLEColl, "Count", GetCount, SetNotSupported, VT_I4)
! 	DISP_FUNCTION(CGMEOLEColl, "Add", Add, VT_EMPTY, VTS_DISPATCH)
  	DISP_FUNCTION(CGMEOLEColl, "Find", Find, VT_I4, VTS_DISPATCH)
! 	DISP_FUNCTION(CGMEOLEColl, "Remove", Remove, VT_EMPTY, VTS_VARIANT)
  	DISP_FUNCTION(CGMEOLEColl, "RemoveAll", RemoveAll, VT_EMPTY, VTS_NONE)
  	DISP_PROPERTY_PARAM(CGMEOLEColl, "Item", GetItem, SetItem, VT_DISPATCH, VTS_I4)
***************
*** 67,74 ****
  END_DISPATCH_MAP()
  
  
- // {8CF6108F-F558-4536-8C26-65EE58218D98}
- static const IID IID_IGMEOLEColl = { 0x8cf6108f, 0xf558, 0x4536, 
- { 0x8c, 0x26, 0x65, 0xee, 0x58, 0x21, 0x8d, 0x98 } };
  
  
--- 67,74 ----
  END_DISPATCH_MAP()
  
+ // {36C7B797-6BDE-46d0-8870-70189000EDF9}
+ //static const IID IID_IGMEOLEColl = 
+ //{ 0x36c7b797, 0x6bde, 0x46d0, { 0x88, 0x70, 0x70, 0x18, 0x90, 0x0, 0xed, 0xf9 } };
  
  
  
***************
*** 78,82 ****
  
  BEGIN_INTERFACE_MAP(CGMEOLEColl, CCmdTarget)
! 	INTERFACE_PART(CGMEOLEColl, IID_IGMEOLEColl, Dispatch)
  END_INTERFACE_MAP()
  
--- 78,83 ----
  
  BEGIN_INTERFACE_MAP(CGMEOLEColl, CCmdTarget)
! 	INTERFACE_PART(CGMEOLEColl, IID_IGMEOLEColl, Dual)
! 	DUAL_ERRORINFO_PART(CGMEOLEColl)
  END_INTERFACE_MAP()
  
***************
*** 142,150 ****
  }
  
! long CGMEOLEColl::Add(LPDISPATCH newValue)
  {
  	m_ptrArray.Add(newValue);
  	newValue->AddRef();
- 	return m_ptrArray.GetSize();
  }
  
--- 143,150 ----
  }
  
! void CGMEOLEColl::Add(LPDISPATCH newValue)
  {
  	m_ptrArray.Add(newValue);
  	newValue->AddRef();
  }
  
***************
*** 160,164 ****
  }
  
! long CGMEOLEColl::Remove(const VARIANT FAR& removeValue)
  {
  	int nIndex = -1;
--- 160,164 ----
  }
  
! void CGMEOLEColl::Remove(const VARIANT FAR& removeValue)
  {
  	int nIndex = -1;
***************
*** 188,192 ****
  
  	m_ptrArray.RemoveAt(nIndex);
- 	return m_ptrArray.GetSize();
  }
  
--- 188,191 ----
***************
*** 200,202 ****
--- 199,305 ----
  	}
  	m_ptrArray.RemoveAll();
+ }
+ 
+ 
+ DELEGATE_DUAL_INTERFACE(CGMEOLEColl, Dual)
+ 
+ // Implement ISupportErrorInfo to indicate we support the
+ // OLE Automation error handler.
+ IMPLEMENT_DUAL_ERRORINFO(CGMEOLEColl, IID_IGMEOLEColl)
+ 
+ 
+ STDMETHODIMP CGMEOLEColl::XDual::get_Count(long *cnt)
+ {
+ 	METHOD_PROLOGUE(CGMEOLEColl, Dual)
+ 
+ 	TRY_DUAL(IID_IGMEOLEColl)
+ 	{
+ 		*cnt = pThis->GetCount();
+ 		return NOERROR;
+ 	}
+ 	CATCH_ALL_DUAL
+ }
+ 
+ STDMETHODIMP CGMEOLEColl::XDual::Add(IDispatch* newValue)
+ {
+ 	METHOD_PROLOGUE(CGMEOLEColl, Dual)
+ 
+ 	TRY_DUAL(IID_IGMEOLEColl)
+ 	{
+ 		pThis->Add(newValue);
+ 		return NOERROR;
+ 	}
+ 	CATCH_ALL_DUAL
+ }
+ 
+ STDMETHODIMP CGMEOLEColl::XDual::Find(IDispatch* findValue, long *cnt)
+ {
+ 	METHOD_PROLOGUE(CGMEOLEColl, Dual)
+ 
+ 	TRY_DUAL(IID_IGMEOLEColl)
+ 	{
+ 		*cnt = pThis->Find(findValue);
+ 		return NOERROR;
+ 	}
+ 	CATCH_ALL_DUAL
+ }
+ 
+ STDMETHODIMP CGMEOLEColl::XDual::Remove(VARIANT removeValue)
+ {
+ 	METHOD_PROLOGUE(CGMEOLEColl, Dual)
+ 
+ 	TRY_DUAL(IID_IGMEOLEColl)
+ 	{
+ 		pThis->Remove(removeValue);
+ 		return NOERROR;
+ 	}
+ 	CATCH_ALL_DUAL
+ }
+ 
+ STDMETHODIMP CGMEOLEColl::XDual::RemoveAll()
+ {
+ 	METHOD_PROLOGUE(CGMEOLEColl, Dual)
+ 
+ 	TRY_DUAL(IID_IGMEOLEColl)
+ 	{
+ 		pThis->RemoveAll();
+ 		return NOERROR;
+ 	}
+ 	CATCH_ALL_DUAL
+ }
+ 
+ STDMETHODIMP CGMEOLEColl::XDual::get_Item(long nIndex, IDispatch** val)
+ {
+ 	METHOD_PROLOGUE(CGMEOLEColl, Dual)
+ 
+ 	TRY_DUAL(IID_IGMEOLEColl)
+ 	{
+ 		*val = pThis->GetItem(nIndex);
+ 		return NOERROR;
+ 	}
+ 	CATCH_ALL_DUAL
+ }
+ 
+ STDMETHODIMP CGMEOLEColl::XDual::put_Item(long nIndex, IDispatch* newValue)
+ {
+ 	METHOD_PROLOGUE(CGMEOLEColl, Dual)
+ 
+ 	TRY_DUAL(IID_IGMEOLEColl)
+ 	{
+ 		pThis->SetItem(nIndex, newValue);
+ 		return NOERROR;
+ 	}
+ 	CATCH_ALL_DUAL
+ }
+ 
+ STDMETHODIMP CGMEOLEColl::XDual::get__NewEnum(IUnknown** e)
+ {
+ 	METHOD_PROLOGUE(CGMEOLEColl, Dual)
+ 
+ 	TRY_DUAL(IID_IGMEOLEColl)
+ 	{
+ 		*e = pThis->GetNewEnum();
+ 		return NOERROR;
+ 	}
+ 	CATCH_ALL_DUAL
  }

Index: GMEOLEColl.h
===================================================================
RCS file: /var/lib/gme/GMESRC/GME/Gme/GMEOLEColl.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** GMEOLEColl.h	18 Dec 2003 13:28:41 -0000	1.2
--- GMEOLEColl.h	22 Jul 2004 14:05:36 -0000	1.3
***************
*** 20,39 ****
  
  // Overrides
! 	// ClassWizard generated virtual function overrides
! 	//{{AFX_VIRTUAL(CStringCollect)
! 	public:
  	virtual void OnFinalRelease();
- 	//}}AFX_VIRTUAL
  
! 	// Generated OLE dispatch map functions
! 	//{{AFX_DISPATCH(CGMEOLEColl)
  	afx_msg long GetCount();
! 	afx_msg long Add(LPDISPATCH newValue);
  	afx_msg long Find(LPDISPATCH findValue);
! 	afx_msg long Remove(const VARIANT FAR& removeValue);
  	afx_msg void RemoveAll();
  	afx_msg LPDISPATCH GetItem(long nIndex);
  	afx_msg void SetItem(long nIndex, LPDISPATCH newValue);
! 	//}}AFX_DISPATCH
  
  // Implementation
--- 20,37 ----
  
  // Overrides
! public:
  	virtual void OnFinalRelease();
  
! 
! 	// OLE dispatch map functions
  	afx_msg long GetCount();
! 	afx_msg void Add(LPDISPATCH newValue);
  	afx_msg long Find(LPDISPATCH findValue);
! 	afx_msg void Remove(const VARIANT FAR& removeValue);
  	afx_msg void RemoveAll();
  	afx_msg LPDISPATCH GetItem(long nIndex);
  	afx_msg void SetItem(long nIndex, LPDISPATCH newValue);
! 	afx_msg LPUNKNOWN GetNewEnum();
! 	
  
  // Implementation
***************
*** 48,56 ****
  	DECLARE_MESSAGE_MAP()
  
- 	afx_msg LPUNKNOWN GetNewEnum();
- 
  	DECLARE_DISPATCH_MAP()
  
  	DECLARE_INTERFACE_MAP()
  };
  
--- 46,69 ----
  	DECLARE_MESSAGE_MAP()
  
  	DECLARE_DISPATCH_MAP()
  
  	DECLARE_INTERFACE_MAP()
+ 
+ 	BEGIN_DUAL_INTERFACE_PART(Dual, IGMEOLEColl)
+ 		STDMETHOD(get_Count)(THIS_ long *cnt);
+ 
+ 		STDMETHOD(Add)(THIS_ IDispatch* newValue);
+ 		STDMETHOD(Find)(THIS_ IDispatch* findValue, long *cnt);
+ 		STDMETHOD(Remove)(THIS_ VARIANT removeValue);
+ 		STDMETHOD(RemoveAll)(THIS);
+ 
+ 		STDMETHOD(get_Item)(THIS_ long nIndex, IDispatch** val);
+ 		STDMETHOD(put_Item)(THIS_ long nIndex, IDispatch* newValue);
+ 		STDMETHOD(get__NewEnum)(THIS_ IUnknown** e);
+ 	END_DUAL_INTERFACE_PART(Dual)
+ 
+ 	//     add declaration of ISupportErrorInfo implementation
+ 	//     to indicate we support the OLE Automation error object
+ 	DECLARE_DUAL_ERRORINFO()
  };
  

Index: GMEOLEModel.cpp
===================================================================
RCS file: /var/lib/gme/GMESRC/GME/Gme/GMEOLEModel.cpp,v
retrieving revision 1.5
retrieving revision 1.6
diff -C2 -d -r1.5 -r1.6
*** GMEOLEModel.cpp	12 Mar 2004 15:41:54 -0000	1.5
--- GMEOLEModel.cpp	22 Jul 2004 14:05:36 -0000	1.6
***************
*** 89,98 ****
  //  dispinterface in the .ODL file.
  
! // {FCDF5F10-668F-44B0-9C7A-2A63197D57BA}
! static const IID IID_IGMEOLEModel =
! { 0xfcdf5f10, 0x668f, 0x44b0, { 0x9c, 0x7a, 0x2a, 0x63, 0x19, 0x7d, 0x57, 0xba } };
  
  BEGIN_INTERFACE_MAP(CGMEOLEModel, CCmdTarget)
! 	INTERFACE_PART(CGMEOLEModel, IID_IGMEOLEModel, Dispatch)
  END_INTERFACE_MAP()
  
--- 89,100 ----
  //  dispinterface in the .ODL file.
  
! // {399A16A0-D209-4d00-9BDF-858D87EC4641}
! //static const IID IID_IGMEOLEModel = 
! //{ 0x399a16a0, 0xd209, 0x4d00, { 0x9b, 0xdf, 0x85, 0x8d, 0x87, 0xec, 0x46, 0x41 } };
! 
  
  BEGIN_INTERFACE_MAP(CGMEOLEModel, CCmdTarget)
! 	INTERFACE_PART(CGMEOLEModel, IID_IGMEOLEModel, Dual)
! 	DUAL_ERRORINFO_PART(CGMEOLEModel)
  END_INTERFACE_MAP()
  
***************
*** 304,305 ****
--- 306,500 ----
  	m_view->Invalidate();
  }
+ 
+ DELEGATE_DUAL_INTERFACE(CGMEOLEModel, Dual)
+ 
+ // Implement ISupportErrorInfo to indicate we support the
+ // OLE Automation error handler.
+ IMPLEMENT_DUAL_ERRORINFO(CGMEOLEModel, IID_IGMEOLEModel)
+ 
+ 
+ STDMETHODIMP CGMEOLEModel::XDual::put_Active(VARIANT_BOOL isActive)
+ {
+ 	METHOD_PROLOGUE(CGMEOLEModel, Dual)
+ 
+ 	TRY_DUAL(IID_IGMEOLEModel)
+ 	{
+ 		pThis->SetActive(isActive);
+ 		return NOERROR;
+ 	}
+ 	CATCH_ALL_DUAL
+ }
+ 
+ STDMETHODIMP CGMEOLEModel::XDual::get_Active(VARIANT_BOOL* isActive)
+ {
+ 	METHOD_PROLOGUE(CGMEOLEModel, Dual)
+ 
+ 	TRY_DUAL(IID_IGMEOLEModel)
+ 	{
+ #pragma warning(disable: 4310) // cast truncates constant value
+ 		*isActive = (pThis->GetActive() == FALSE) ? VARIANT_FALSE : VARIANT_TRUE;
+ #pragma warning(default: 4310) // cast truncates constant value
+ 		return NOERROR;
+ 	}
+ 	CATCH_ALL_DUAL
+ }
+ 
+ STDMETHODIMP CGMEOLEModel::XDual::get_Aspects(IGMEOLEColl** coll)
+ {
+ 	METHOD_PROLOGUE(CGMEOLEModel, Dual)
+ 
+ 	TRY_DUAL(IID_IGMEOLEModel)
+ 	{
+ 		LPDISPATCH lpDisp = pThis->GetAspects();
+ 		lpDisp->QueryInterface(IID_IGMEOLEColl, (LPVOID*)coll);
+ 		return NOERROR;
+ 	}
+ 	CATCH_ALL_DUAL
+ }
+ 
+ STDMETHODIMP CGMEOLEModel::XDual::get_MgaModel(IMgaModel** model)
+ {
+ 	METHOD_PROLOGUE(CGMEOLEModel, Dual)
+ 
+ 	TRY_DUAL(IID_IGMEOLEModel)
+ 	{
+ 		LPDISPATCH lpDisp = pThis->GetMgaModel();
+ 		lpDisp->QueryInterface(IID_IMgaModel, (LPVOID*)model);
+ 		return NOERROR;
+ 	}
+ 	CATCH_ALL_DUAL
+ }
+ 
+ STDMETHODIMP CGMEOLEModel::XDual::get_Valid(VARIANT_BOOL* isValid)
+ {
+ 	METHOD_PROLOGUE(CGMEOLEModel, Dual)
+ 
+ 	TRY_DUAL(IID_IGMEOLEModel)
+ 	{
+ #pragma warning(disable: 4310) // cast truncates constant value
+ 		*isValid = (pThis->GetValid() == FALSE) ? VARIANT_FALSE : VARIANT_TRUE;
+ #pragma warning(default: 4310) // cast truncates constant value
+ 		return NOERROR;
+ 	}
+ 	CATCH_ALL_DUAL
+ }
+ 
+ STDMETHODIMP CGMEOLEModel::XDual::Print()
+ {
+ 	METHOD_PROLOGUE(CGMEOLEModel, Dual)
+ 
+ 	TRY_DUAL(IID_IGMEOLEModel)
+ 	{
+ 		pThis->Print();
+ 		return NOERROR;
+ 	}
+ 	CATCH_ALL_DUAL
+ }
+ 
+ STDMETHODIMP CGMEOLEModel::XDual::PrintDialog()
+ {
+ 	METHOD_PROLOGUE(CGMEOLEModel, Dual)
+ 
+ 	TRY_DUAL(IID_IGMEOLEModel)
+ 	{
+ 		pThis->PrintDialog();
+ 		return NOERROR;
+ 	}
+ 	CATCH_ALL_DUAL
+ }
+ 
+ 
+ STDMETHODIMP CGMEOLEModel::XDual::DumpWindowsMetaFile(BSTR filePath)
+ {
+ 	METHOD_PROLOGUE(CGMEOLEModel, Dual)
+ 
+ 	TRY_DUAL(IID_IGMEOLEModel)
+ 	{
+ 		pThis->DumpWindowsMetaFile(CString(filePath));
+ 		return NOERROR;
+ 	}
+ 	CATCH_ALL_DUAL
+ }
+ 
+ 
+ STDMETHODIMP CGMEOLEModel::XDual::CheckConstraints()
+ {
+ 	METHOD_PROLOGUE(CGMEOLEModel, Dual)
+ 
+ 	TRY_DUAL(IID_IGMEOLEModel)
+ 	{
+ 		pThis->CheckConstraints();
+ 		return NOERROR;
+ 	}
+ 	CATCH_ALL_DUAL
+ }
+ 
+ 
+ STDMETHODIMP CGMEOLEModel::XDual::RunComponent(BSTR appID)
+ {
+ 	METHOD_PROLOGUE(CGMEOLEModel, Dual)
+ 
+ 	TRY_DUAL(IID_IGMEOLEModel)
+ 	{
+ 		pThis->RunComponent(CString(appID));
+ 		return NOERROR;
+ 	}
+ 	CATCH_ALL_DUAL
+ }
+ 
+ 
+ STDMETHODIMP CGMEOLEModel::XDual::RunComponentDialog()
+ {
+ 	METHOD_PROLOGUE(CGMEOLEModel, Dual)
+ 
+ 	TRY_DUAL(IID_IGMEOLEModel)
+ 	{
+ 		pThis->RunComponentDialog();
+ 		return NOERROR;
+ 	}
+ 	CATCH_ALL_DUAL
+ }
+ 
+ 
+ STDMETHODIMP CGMEOLEModel::XDual::Close()
+ {
+ 	METHOD_PROLOGUE(CGMEOLEModel, Dual)
+ 
+ 	TRY_DUAL(IID_IGMEOLEModel)
+ 	{
+ 		pThis->Close();
+ 		return NOERROR;
+ 	}
+ 	CATCH_ALL_DUAL
+ }
+ 
+ 
+ STDMETHODIMP CGMEOLEModel::XDual::GrayOutFCO(VARIANT_BOOL bGray, VARIANT_BOOL bNeighbours, IMgaFCOs* mgaFCO)
+ {
+ 	METHOD_PROLOGUE(CGMEOLEModel, Dual)
+ 
+ 	TRY_DUAL(IID_IGMEOLEModel)
+ 	{
+ 		LPDISPATCH lpDisp = NULL;
+ 		mgaFCO->QueryInterface(IID_IDispatch, (LPVOID*)&lpDisp);
+ 		pThis->GrayOutFCO(bGray, bNeighbours, lpDisp);
+ 		lpDisp->Release();
+ 		return NOERROR;
+ 	}
+ 	CATCH_ALL_DUAL
+ }
+ 
+ 
+ STDMETHODIMP CGMEOLEModel::XDual::GrayOutAll(VARIANT_BOOL bGray)
+ {
+ 	METHOD_PROLOGUE(CGMEOLEModel, Dual)
+ 
+ 	TRY_DUAL(IID_IGMEOLEModel)
+ 	{
+ 		pThis->GrayOutAll(bGray);
+ 		return NOERROR;
+ 	}
+ 	CATCH_ALL_DUAL
+ }
+ 
+ 

Index: GMEOLEModel.h
===================================================================
RCS file: /var/lib/gme/GMESRC/GME/Gme/GMEOLEModel.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** GMEOLEModel.h	25 Jan 2004 17:31:45 -0000	1.2
--- GMEOLEModel.h	22 Jul 2004 14:05:36 -0000	1.3
***************
*** 31,39 ****
  
  // Overrides
! 	// ClassWizard generated virtual function overrides
! 	//{{AFX_VIRTUAL(CGMEOLEModel)
! 	public:
  	virtual void OnFinalRelease();
- 	//}}AFX_VIRTUAL
  
  // Implementation
--- 31,36 ----
  
  // Overrides
! public:
  	virtual void OnFinalRelease();
  
  // Implementation
***************
*** 50,55 ****
  
  	DECLARE_MESSAGE_MAP()
! 	// Generated OLE dispatch map functions
! 	//{{AFX_DISPATCH(CGMEOLEModel)
  	afx_msg BOOL GetActive();
  	afx_msg void SetActive(BOOL bNewValue);
--- 47,51 ----
  
  	DECLARE_MESSAGE_MAP()
! 	// OLE dispatch map functions
  	afx_msg BOOL GetActive();
  	afx_msg void SetActive(BOOL bNewValue);
***************
*** 69,75 ****
  	afx_msg void GrayOutFCO(BOOL bGray, BOOL bNeighbours, LPDISPATCH mgaFCO);
  	afx_msg void GrayOutAll(BOOL bGray);
! 	//}}AFX_DISPATCH
  	DECLARE_DISPATCH_MAP()
  	DECLARE_INTERFACE_MAP()
  };
  
--- 65,94 ----
  	afx_msg void GrayOutFCO(BOOL bGray, BOOL bNeighbours, LPDISPATCH mgaFCO);
  	afx_msg void GrayOutAll(BOOL bGray);
! 
  	DECLARE_DISPATCH_MAP()
  	DECLARE_INTERFACE_MAP()
+ 
+ 	BEGIN_DUAL_INTERFACE_PART(Dual, IGMEOLEModel)
+ 		STDMETHOD(put_Active)(THIS_ VARIANT_BOOL isActive);
+ 		STDMETHOD(get_Active)(THIS_ VARIANT_BOOL* isActive);
+ 		STDMETHOD(get_Aspects)(THIS_ IGMEOLEColl** coll);
+ 		STDMETHOD(get_MgaModel)(THIS_ IMgaModel** model);
+ 		STDMETHOD(get_Valid)(THIS_ VARIANT_BOOL* isValid);
+ 		
+ 		STDMETHOD(Print)(THIS);
+ 		STDMETHOD(PrintDialog)(THIS);
+ 		STDMETHOD(DumpWindowsMetaFile)(THIS_ BSTR filePath);
+ 		STDMETHOD(CheckConstraints)(THIS);
+ 		STDMETHOD(RunComponent)(THIS_ BSTR appID);
+ 		STDMETHOD(RunComponentDialog)(THIS);
+ 		STDMETHOD(Close)(THIS);
+ 		STDMETHOD(GrayOutFCO)(THIS_ VARIANT_BOOL bGray, VARIANT_BOOL bNeighbours, IMgaFCOs* mgaFCO);
+ 		STDMETHOD(GrayOutAll)(THIS_ VARIANT_BOOL bGray);
+ 	END_DUAL_INTERFACE_PART(Dual)
+ 
+ 	
+ 	//     add declaration of ISupportErrorInfo implementation
+ 	//     to indicate we support the OLE Automation error object
+ 	DECLARE_DUAL_ERRORINFO()
  };
  

Index: GMEOLEPanel.cpp
===================================================================
RCS file: /var/lib/gme/GMESRC/GME/Gme/GMEOLEPanel.cpp,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** GMEOLEPanel.cpp	21 Jan 2004 16:00:11 -0000	1.2
--- GMEOLEPanel.cpp	22 Jul 2004 14:05:36 -0000	1.3
***************
*** 60,69 ****
  //  dispinterface in the .ODL file.
  
! // {8EA9AE85-8787-4F5C-B5F6-1E0F78EE4E0B}
! static const IID IID_IGMEOLEPanel =
! { 0x8ea9ae85, 0x8787, 0x4f5c, { 0xb5, 0xf6, 0x1e, 0xf, 0x78, 0xee, 0x4e, 0xb } };
  
  BEGIN_INTERFACE_MAP(CGMEOLEPanel, CCmdTarget)
! 	INTERFACE_PART(CGMEOLEPanel, IID_IGMEOLEPanel, Dispatch)
  END_INTERFACE_MAP()
  
--- 60,71 ----
  //  dispinterface in the .ODL file.
  
! // {C047FAEB-7AE7-40fb-8C5C-90C73DAD4BC6}
! //static const GUID <<name>> = 
! //{ 0xc047faeb, 0x7ae7, 0x40fb, { 0x8c, 0x5c, 0x90, 0xc7, 0x3d, 0xad, 0x4b, 0xc6 } };
! 
  
  BEGIN_INTERFACE_MAP(CGMEOLEPanel, CCmdTarget)
! 	INTERFACE_PART(CGMEOLEPanel, IID_IGMEOLEPanel, Dual)
! 	DUAL_ERRORINFO_PART(CGMEOLEPanel)
  END_INTERFACE_MAP()
  
***************
*** 105,106 ****
--- 107,156 ----
  
  }
+ 
+ DELEGATE_DUAL_INTERFACE(CGMEOLEPanel, Dual)
+ 
+ // Implement ISupportErrorInfo to indicate we support the
+ // OLE Automation error handler.
+ IMPLEMENT_DUAL_ERRORINFO(CGMEOLEPanel, IID_IGMEOLEAspect)
+ 
+ 
+ STDMETHODIMP CGMEOLEPanel::XDual::get_Name(BSTR* name)
+ {
+ 	METHOD_PROLOGUE(CGMEOLEPanel, Dual)
+ 
+ 	TRY_DUAL(IID_IGMEOLEPanel)
+ 	{
+ 		CString str = pThis->GetName();
+ 		str.SetSysString(name);
+ 		return NOERROR;
+ 	}
+ 	CATCH_ALL_DUAL
+ }
+ 
+ 
+ STDMETHODIMP CGMEOLEPanel::XDual::put_Visible(VARIANT_BOOL isVisible)
+ {
+ 	METHOD_PROLOGUE(CGMEOLEPanel, Dual)
+ 
+ 	TRY_DUAL(IID_IGMEOLEPanel)
+ 	{
+ 		pThis->SetVisible(isVisible);
+ 		return NOERROR;
+ 	}
+ 	CATCH_ALL_DUAL
+ }
+ 
+ 
+ STDMETHODIMP CGMEOLEPanel::XDual::get_Visible(VARIANT_BOOL* isVisible)
+ {
+ 	METHOD_PROLOGUE(CGMEOLEPanel, Dual)
+ 
+ 	TRY_DUAL(IID_IGMEOLEPanel)
+ 	{
+ #pragma warning(disable: 4310) // cast truncates constant value
+ 		*isVisible = (pThis->GetVisible() == FALSE) ? VARIANT_FALSE : VARIANT_TRUE;
+ #pragma warning(default: 4310) // cast truncates constant value
+ 		return NOERROR;
+ 	}
+ 	CATCH_ALL_DUAL
+ }
\ No newline at end of file

Index: GMEOLEPanel.h
===================================================================
RCS file: /var/lib/gme/GMESRC/GME/Gme/GMEOLEPanel.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** GMEOLEPanel.h	17 Dec 2003 13:45:02 -0000	1.1
--- GMEOLEPanel.h	22 Jul 2004 14:05:36 -0000	1.2
***************
*** 27,35 ****
  
  // Overrides
! 	// ClassWizard generated virtual function overrides
! 	//{{AFX_VIRTUAL(CGMEOLEPanel)
! 	public:
  	virtual void OnFinalRelease();
- 	//}}AFX_VIRTUAL
  
  // Implementation
--- 27,32 ----
  
  // Overrides
! public:
  	virtual void OnFinalRelease();
  
  // Implementation
***************
*** 46,58 ****
  
  	DECLARE_MESSAGE_MAP()
! 	// Generated OLE dispatch map functions
! 	//{{AFX_DISPATCH(CGMEOLEPanel)
  	afx_msg BSTR GetName();
  	afx_msg void SetName(LPCTSTR lpszNewValue);
  	afx_msg BOOL GetVisible();
  	afx_msg void SetVisible(BOOL bNewValue);
! 	//}}AFX_DISPATCH
  	DECLARE_DISPATCH_MAP()
  	DECLARE_INTERFACE_MAP()
  };
  
--- 43,64 ----
  
  	DECLARE_MESSAGE_MAP()
! 	// OLE dispatch map functions
  	afx_msg BSTR GetName();
  	afx_msg void SetName(LPCTSTR lpszNewValue);
  	afx_msg BOOL GetVisible();
  	afx_msg void SetVisible(BOOL bNewValue);
! 	
  	DECLARE_DISPATCH_MAP()
  	DECLARE_INTERFACE_MAP()
+ 
+ 	BEGIN_DUAL_INTERFACE_PART(Dual, IGMEOLEPanel)
+ 		STDMETHOD(get_Name)(THIS_ BSTR* name);
+ 		STDMETHOD(put_Visible)(THIS_ VARIANT_BOOL isVisible);
+ 		STDMETHOD(get_Visible)(THIS_ VARIANT_BOOL* isVisible);
+ 	END_DUAL_INTERFACE_PART(Dual)
+ 
+ 	//     add declaration of ISupportErrorInfo implementation
+ 	//     to indicate we support the OLE Automation error object
+ 	DECLARE_DUAL_ERRORINFO()
  };
  

Index: GMEView.cpp
===================================================================
RCS file: /var/lib/gme/GMESRC/GME/Gme/GMEView.cpp,v
retrieving revision 1.152
retrieving revision 1.153
diff -C2 -d -r1.152 -r1.153
*** GMEView.cpp	19 Jul 2004 17:19:29 -0000	1.152
--- GMEView.cpp	22 Jul 2004 14:05:36 -0000	1.153
***************
*** 10,14 ****
  #include "GMEstd.h"
  
- #include "GMEAppi.h"
  #include "GuiMeta.h"
  #include "GMEDoc.h"
--- 10,13 ----

Index: GmeLib.idl
===================================================================
RCS file: /var/lib/gme/GMESRC/GME/Gme/GmeLib.idl,v
retrieving revision 1.7
retrieving revision 1.8
diff -C2 -d -r1.7 -r1.8
*** GmeLib.idl	18 Dec 2003 10:10:59 -0000	1.7
--- GmeLib.idl	22 Jul 2004 14:05:36 -0000	1.8
***************
*** 5,9 ****
  import "Mga.idl";
  import "Gme.idl";
- import "Gme.odl";
  
  // --------------------------- Meta Library
--- 5,8 ----
***************
*** 12,18 ****
  	uuid(0ADEEC71-D83A-11D3-B36B-005004CC8592),
  	version(1.0),
! 	helpstring("MGA GME Type Library")
  ]
! library GmeLib
  {
  	importlib("stdole32.tlb");
--- 11,17 ----
  	uuid(0ADEEC71-D83A-11D3-B36B-005004CC8592),
  	version(1.0),
! 	helpstring("GME Type Library")
  ]
! library GMELib
  {
  	importlib("stdole32.tlb");
***************
*** 21,69 ****
  	//  Class information for CGMEOLEApp
  
! 	[ uuid(013F78DC-2435-4086-B3CF-63D402DD7141) ]
  	coclass Application
  	{
! 		[default] dispinterface IGMEOLEApp;
  		[source]  interface IMgaComponent;
  		[source]  interface IMgaComponentEx;
  		interface IMgaVersionInfo;
! 	};
! 
! 	//  Class information for Model collections
! 	[ uuid(FD76B7F0-F657-4412-BF25-8B8C38471F0B) ]
! 	coclass Models
! 	{
! 		[default] dispinterface IGMEOLEColl;
  	};
  
  	//  Class information for CGMEOLEModel
  
! 	[ uuid(2B8F0357-C394-45E6-BD0E-214398CD199D) ]
  	coclass Model
  	{
! 		[default] dispinterface IGMEOLEModel;
! 	};
! 
! 	//  Class information for Aspect collections
! 	[ uuid(C1C36C3E-05A6-45e7-8136-E49940E69D18) ]
! 	coclass Aspects
! 	{
! 		[default] dispinterface IGMEOLEColl;
  	};
  
! 		//  Class information for CGMEOLEAspect
  
! 	[ uuid(BB39B12A-B053-471F-8894-CABE694DAA2C) ]
  	coclass Aspect
  	{
! 		[default] dispinterface IGMEOLEAspect;
! 	};
! 
! 
! 	//  Class information for Aspect collections
! 	[ uuid(2E996484-0148-4cd5-A710-A62B6BA04D36) ]
! 	coclass Panels
! 	{
! 		[default] dispinterface IGMEOLEColl;
  	};
  
--- 20,49 ----
  	//  Class information for CGMEOLEApp
  
! 	[ uuid(C7DCCC2E-1642-4a40-8060-51A7B9FAE488) ]
  	coclass Application
  	{
! 		[default] interface IGMEOLEApp;
  		[source]  interface IMgaComponent;
  		[source]  interface IMgaComponentEx;
  		interface IMgaVersionInfo;
! 		interface ISupportErrorInfo;
  	};
  
  	//  Class information for CGMEOLEModel
  
! 	[ uuid(7B512D6A-6767-4e3f-BF1F-A22943E68C32) ]
  	coclass Model
  	{
! 		[default] interface IGMEOLEModel;
! 		interface ISupportErrorInfo;
  	};
  
! 	//  Class information for CGMEOLEAspect
  
! 	[ uuid(D4AFDD5A-037A-42d5-A9A1-F44C81EA7AF7) ]
  	coclass Aspect
  	{
! 		[default] interface IGMEOLEAspect;
! 		interface ISupportErrorInfo;
  	};
  
***************
*** 71,81 ****
  	//  Class information for CGMEOLEPanel
  
! 	[ uuid(56F7B6E8-192F-4812-969A-7D607F3F7E1D) ]
  	coclass Panel
  	{
! 		[default] dispinterface IGMEOLEPanel;
  	};
  
  
! 
  };
--- 51,68 ----
  	//  Class information for CGMEOLEPanel
  
! 	[ uuid(A946466F-29E2-44a6-A69A-4D6D9268A37F) ]
  	coclass Panel
  	{
! 		[default] interface IGMEOLEPanel;
! 		interface ISupportErrorInfo;
  	};
  
+ 	//  Class information for CGMEOLEPanel
  
! 	[ uuid(05403CF4-5C53-49d4-8F63-ED37870ABF1F) ]
! 	coclass Collection
! 	{
! 		[default] interface IGMEOLEColl;
! 		interface ISupportErrorInfo;
! 	};
  };

Index: ScrollZoomView.cpp
===================================================================
RCS file: /var/lib/gme/GMESRC/GME/Gme/ScrollZoomView.cpp,v
retrieving revision 1.15
retrieving revision 1.16
diff -C2 -d -r1.15 -r1.16
*** ScrollZoomView.cpp	14 Jun 2004 20:32:46 -0000	1.15
--- ScrollZoomView.cpp	22 Jul 2004 14:05:36 -0000	1.16
***************
*** 11,15 ****
  #include "GMEstd.h"
  
- #include "GMEAppi.h"
  #include "GuiMeta.h"
  #include "GMEDoc.h"
--- 11,14 ----

Index: StdAfx.h
===================================================================
RCS file: /var/lib/gme/GMESRC/GME/Gme/StdAfx.h,v
retrieving revision 1.9
retrieving revision 1.10
diff -C2 -d -r1.9 -r1.10
*** StdAfx.h	17 May 2004 17:50:32 -0000	1.9
--- StdAfx.h	22 Jul 2004 14:05:36 -0000	1.10
***************
*** 18,21 ****
--- 18,22 ----
  #include <afxodlgs.h>       // MFC OLE dialog classes
  #include <afxdisp.h>        // MFC Automation classes
+ #include <afxctl.h>			// Pick up the definition of AfxOleRegisterTypeLib
  #include <afxdtctl.h>		// MFC support for Internet Explorer 4 Common Controls
  #ifndef _AFX_NO_AFXCMN_SUPPORT
***************
*** 23,26 ****
--- 24,29 ----
  #endif // _AFX_NO_AFXCMN_SUPPORT
  
+ #include "mfcdual.h"
+ 
  #include <atlbase.h>
  extern CComModule _Module;
***************
*** 32,36 ****
  
  #include "..\Mga\MgaLib.h"
- #include "GMEAppi.h"
  
  #include "CommonError.h"
--- 35,38 ----

--- GME.odl DELETED ---



More information about the GME-commit mailing list