[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