[gme-users] C# interpreters?

Zoltan Molnar zolmol at isis.vanderbilt.edu
Tue Jan 3 16:56:13 CST 2006


Hi,

Yes it did, but only with the help of a proxyinterpreter (a raw com
interpreter) which currently just invokes this C# interpreter (because
of the way GME installs/registers a new interpreter is not yet suitable
for C# interpreters).

The keyword is CCW (Com Callable Wrapper), which enables .NET objects to
be callable from/like COM.

The C# interpreter has to refer the Mga, MgaUtil libraries and has to
include the System.Runtime.InteropServices; too.
In project settings 'Register for COM interop' has to be enabled.


using System;
using System.Runtime.InteropServices;
using MGAUTILLib;
using MGALib;
using System.Windows.Forms;

namespace CSInterpreter2
{
	[Guid("EA60E5CC-D141-47d7-98ED-7B8C686BDF52")]
	[ClassInterface(ClassInterfaceType.None)]
	[ProgId("Mga.Interpreter.CS2IntwMZNumbers")]
	public class MyMgaComponent : IMgaComponentEx, IMgaComponent,
IMgaVersionInfo
	{
		public MyMgaComponent()
		{
		}

		#region IMgacomponentEx

		public void InvokeEx( MgaProject project, MgaFCO
currentobj, MgaFCOs selectedobjs, int param)
		{
			System.Text.StringBuilder sb = new
System.Text.StringBuilder( "My kids are: ");
			System.Windows.Forms.MessageBox.Show( "Is it
really running?");
			IMgaTerritory terr;
			project.CreateTerritory( null, out terr, null);
			transactiontype_enum mod =
transactiontype_enum.TRANSACTION_GENERAL;
			project.BeginTransaction( terr, mod);

			MgaFolder rf = project.RootFolder;
			MgaFCOs childColl = rf.ChildFCOs;
			foreach( MgaFCO child in childColl)
			{
				sb.AppendFormat( " {0}", child.Name);
			}
			project.CommitTransaction();
			
			System.Windows.Forms.MessageBox.Show(
sb.ToString());
			return;
		}


		public void ObjectsInvokeEx( MgaProject project,
MgaObject currentobj, MgaObjects selectedobjs, int param)
		{
			return;
		}

		private string m_componentProgId =
"Mga.Interpreter.CS2IntwMZNumbers";
		public string ComponentProgID
		{ 
			get { return m_componentProgId; }
		}

		public void set_ComponentParameter( string name,
System.Object variantObj)
		{
			return;
		}
		public System.Object get_ComponentParameter( string
name)
		{
			return new System.Object();
		}
		#endregion

		#region Imgacomponent

		public void Invoke( MgaProject project, MgaFCOs
selectedobjs, int param)
		{
			return;
		}
		public void Initialize( MgaProject project)
		{
			return;
		}
		public void Enable( bool newVal)
		{
			return;
		}

		private bool m_interactive;
		public bool InteractiveMode 
		{ 
			get { return m_interactive; }
			set { m_interactive = value;}
		}
			
		private string m_componentName = "Dummy Csharp
interpreter";
		public string ComponentName 
		{ 
			get{ return m_componentName; } 
		}
			
		private componenttype_enum m_componentType =
componenttype_enum.COMPONENTTYPE_INTERPRETER;
		public componenttype_enum ComponentType 
		{ 
			get { return m_componentType; }
		}
			
		private string m_paradigm = "SF";
		public string Paradigm 
		{ 
			get { return m_paradigm;} 
		}
		#endregion

		#region Imgaversioninfo
		public MGAUTILLib.MgaInterfaceVersion_enum version
		{ 
			get { return 0;} 
		}
		#endregion

	}
}


Finally, the proxyinterpreter's source:

STDMETHODIMP RawComponent::InvokeEx( IMgaProject *project,  IMgaFCO
*currentobj,  
	
IMgaFCOs *selectedobjs,  long param) {
	COMTRY {
     CComBSTR bstrCompName( L"Mga.Interpreter.CS2IntwMZNumbers" );
 
     CComPtr<IMgaComponentEx> grComponent;
     COMTHROW( grComponent.CoCreateInstance( bstrCompName ) ) ;
     COMTHROW( grComponent->put_InteractiveMode( VARIANT_TRUE ) );
     COMTHROW( grComponent->Enable( VARIANT_TRUE ) );
     COMTHROW( grComponent->Initialize( project ) );
     HRESULT ret = grComponent->InvokeEx( project, currentobj,
selectedobjs, param ) ;
     if(ret != S_OK)
      return ret;
	} COMCATCH(;);
}

Br, Zoli


> -----Original Message-----
> From: gme-users-bounces at list.isis.vanderbilt.edu 
> [mailto:gme-users-bounces at list.isis.vanderbilt.edu] On Behalf 
> Of Daniel Waddington
> Sent: Tuesday, December 20, 2005 5:06 PM
> To: gme-users
> Subject: [gme-users] C# interpreters?
> 
> 
> Hi,
> 
> Has anyone implemented an GME interpreter in C#?
> 
> Thanks,
> Daniel.
> 
> _______________________________________________
> gme-users mailing list
> gme-users at list.isis.vanderbilt.edu
> http://list.isis.vanderbilt.edu/mailman/listinfo/gme-users
> 


More information about the gme-users mailing list