[IronPython] Accesses static ResourceManager from IronPython

Chris Stoy chris.stoy at redstorm.com
Tue Dec 19 01:26:26 CET 2006


Thanks for the response.  I tried the first option
(GetDynamicTypeFromType), but that doesn't seem to work.  Here is a
snippet of code:

 

                  EngineOptions engineOptions = new EngineOptions();

                  engineOptions.ClrDebuggingEnabled = true;

                  IronPython.Compiler.Options.GenerateModulesAsSnippets
= true;

                  PythonEngine engine = new PythonEngine(engineOptions);

 

                  EngineModule rswe = engine.CreateModule("RSWE", true);

                  rswe.Globals.Add("ResourceManager",
PublicResources.ResourceManager);

                  rswe.Globals["Resources"] =
IronPython.Runtime.Operations.Ops.GetDynamicTypeFromType(typeof(PublicRe
sources));

                  engine.Import("RSWE");

 

For testing, I added the public ResourceManager from my PublicResources
class to the globals.  I then tried your suggestion of using
GetDynamicTypeFromType (which, by the way, doesn't seem to be documented
in the IronPython docs..), but none of the public attributes are there
in Python..in fact the type doesn't seem correct.  

 

Here is some output from my Python console in my app:

 

> from RSWE import Resources

> print dir()

['RSWE', 'Resources', '__builtins__', '__name__', 'clr', 'sys']

> print dir(Resources)

['Equals', 'Finalize', 'GetHashCode', 'GetType', 'MakeDynamicType',
'MemberwiseClone', 'Reduce', 'ReferenceEquals', 'ToString', '__class__',
'__doc__', '__init__', '__module__', '__new__', '__reduce__',
'__reduce_ex__', '__repr__']

> x = Resources()

Cannot create instances of <type 'PublicResources'>

> x = Resources.Open

type object 'PublicResources' has no attribute 'Open'

 

 

I can, however, access the resources using ResourceManager:

 

> icon = RSWE.ResourceManager.GetObject("Open")

> print icon

(Icon)

 

Any ideas?

 

Thanks,

 

Chris.

 

 

________________________________

From: users-bounces at lists.ironpython.com
[mailto:users-bounces at lists.ironpython.com] On Behalf Of Dino Viehland
Sent: Monday, December 18, 2006 6:43 PM
To: Discussion of IronPython
Subject: Re: [IronPython] Accesses static ResourceManager from
IronPython

 

Sorry, that 1st line should have been
Ops.GetDynamicTypeFromType(typeof(PublicResources)).

 

From: users-bounces at lists.ironpython.com
[mailto:users-bounces at lists.ironpython.com] On Behalf Of Dino Viehland
Sent: Monday, December 18, 2006 3:42 PM
To: Discussion of IronPython
Subject: Re: [IronPython] Accesses static ResourceManager from
IronPython

 

If you want to follow the way you're currently doing it you can just
publish the DynamicType in Globals, eg:

 

Globals['foo'] = Ops.GetDynamicType(typeof(PublicResources));

 

You can also add a reference to your C# DLL and then the user can import
all of your public types / namespaces (although that may not be what you
want).  E.g.:

 

pe.Sys.AddReference(typeof(SomeTypeInYourAssembly).Assembly);

 

then users can either do import Namespace or import SomeType (assuming
the type has no namespace) or from Namespace import SomeType.  This
would be the equivalent to if the user did:

 

import clr

clr.AddReference('your_assembly_name')

import ...

 

From: users-bounces at lists.ironpython.com
[mailto:users-bounces at lists.ironpython.com] On Behalf Of Chris Stoy
Sent: Monday, December 18, 2006 3:29 PM
To: users at lists.ironpython.com
Subject: [IronPython] Accesses static ResourceManager from IronPython

 

Hello all,

 

I'm working on embedding IronPython into a larger C# application to
allow end-users the ability to write scripts.  One thing I want to do is
provide a set of icon resources in the C# code and expose them to
IronPython so a user can access them.  I created a new Resource.resx
file called "PublicResources" in my C# application.  This creates a
class called "PublicResources" that contains a set of static methods to
access the resources in a type-safe way.  Although I can expose the
underlying ResourceManager instance to IP, what I really want is the
class PublicResources exposed so I can us it in my IronPython code.

 

For example, in C# I would say:

 

Form myForm = new Form();

myForm.Icon = PublicResources.MyFormIcon;

 

 

and in IronPython, I want to say:

 

myForm = Form()

myForm.Icon = PublicResources.MyFormIcon

 

So, I guess this boils down to "how do I expose static classes from C#
to IronPython?" 

 

(On a side note, if anyone knows where there is some documentation on
the proper way to expose .NET class to IronPython I would appreciate it.
Currently I'm creating a new module with PythonEngine.CreateModule(),
adding objects to the Globals, and importing it using
PythonEngine.Import()...but I have no idea if that is the right way to
do it.)

 

Thanks a lot for any help.

 

Chris.

 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/ironpython-users/attachments/20061218/26979188/attachment.html>


More information about the Ironpython-users mailing list