[Python.NET] How to create an instance of C# from pythonnet?

Seungweon Park swpark71 at gmail.com
Sat Apr 20 00:47:52 CEST 2013


I think I resolved the issue which I need to import reference dlls prior to
import "from Network.Common import *".
Common uses many refereces from external *.dlls, once I imported all, then
I can import Common dll and use correctly.

Thank you for your helps.
Spark.


On Fri, Apr 19, 2013 at 10:45 AM, Seungweon Park <swpark71 at gmail.com> wrote:

> Thank you for the replies.
>
> Now, I recompiled Python.Net with .Net 4.0 and get below working with
> simple AAA.BBB.Adapter after reading
>
>
> http://stackoverflow.com/questions/14520888/clr-addreferenceexample-file-unable-to-find-assembly?rq=1
>
> http://stackoverflow.com/questions/13259617/python-for-net-unable-to-find-assembly-error?rq=1
> http://sourceforge.net/p/pythonnet/bugs/17/
> http://sourceforge.net/p/pythonnet/bugs/18/
>
>
> Now I have below sample code(Adapter.proj has two c# files), and
> experimented
>
> Class1.cs
> -----------
> namespace AAA.BBB.CCC
> {
>
>     public class Adapter
>     {
>         public string Function1()
>         {
>             return "AAA.BBB.CCC: Adapter Function1 Called";
>         }
>         public void Function2()
>         {
>             Console.WriteLine("AAA.BBB.CCC: Adapter Function2");
>         }
>     }
>
>     public class Network
>     {
>         public string Function1()
>         {
>             return "AAA.BBB.CCC: Network Function1 called";
>         }
>
>         public void Function2()
>         {
>             Console.WriteLine("AAA.BBB.CCC: Network Function2");
>         }
>     }
> }
>
> namespace AAA.BBB
> {
>     public class Adapter
>     {
>         public string Function1()
>         {
>             return "AAA.BBB: Adapter Function1 Called";
>         }
>         public void Function2()
>         {
>             Console.WriteLine("AAA.BBB: Adapter Function2");
>         }
>     }
>
>     public class Network
>     {
>         public string Function1()
>         {
>             return "AAA.BBB: Network Function1 called";
>         }
>
>         public void Function2()
>         {
>             Console.WriteLine("AAA.BBB: Network Function2");
>         }
>     }
>
> }
>
> Class2.cs
> -----------
> namespace AAA.CCC
> {
>     public class Adapter
>     {
>         public string Function1()
>         {
>             return "AAA.CCC: Adapter Function1 Called";
>         }
>         public void Function2()
>         {
>             Console.WriteLine("AAA.CCC: Adapter Function2");
>         }
>     }
> }
>
> Then, I got below. It seems working great.
>
> C:\Automation\PythonNet>nPython.exe
> Python 2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)]
> on win32
> Type "help", "copyright", "credits" or "license" for more information.
> >>> import sys
> >>> sys.path.append("c:\\automation\\pythonnet")
> >>> import clr
> >>> clr.FindAssembly("Adapter")
> u'Adapter.dll'
> >>> clr.AddReference("Adapter")
> <System.Reflection.RuntimeAssembly object at 0x052E5828>
> >>> adapter1 = Adapter()
> Traceback (most recent call last):
>   File "<stdin>", line 1, in <module>
> NameError: name 'Adapter' is not defined
> >>> from AAA.BBB.CCC import Adapter
> >>> from AAA.BBB.CCC import *
> >>> adapter1 = Adapter()
> >>> adapter1.Function1()
> u'AAA.BBB.CCC: Adapter Function1 Called'
> >>> adapter1.Function2()
> AAA.BBB.CCC: Adapter Function2
> >>> network1 = Network()
> >>> network1.Function1()
> u'AAA.BBB.CCC: Network Function1 called'
> >>> from AAA.CCC import *
> >>> adapter1.Function1()
> u'AAA.BBB.CCC: Adapter Function1 Called'
> >>> adapter1 = Adapter()
> >>> adapter1.Function1()
> u'AAA.CCC: Adapter Function1 Called'
> >>>
>
> My questions are
>
> 1. I don't know how to specify different namespace of class when creating
> an instance.
> 2. The class that I already have has similar above layout in a project.
> Common project has many class files in it, and each class has different
> name space and class name.
> AddReference('Common') looks working and loaded, but can't import.
>
> >>> clr.AddReference('Common')
> <System.Reflection.RuntimeAssembly object at 0x052E73C8>
> >>> from Network import *
> Traceback (most recent call last):
>   File "<stdin>", line 1, in <module>
> ImportError: No module named Network
> >>> from Network.Common import *
> Traceback (most recent call last):
>   File "<stdin>", line 1, in <module>
> ImportError: No module named Network.Common
> >>>
>
> Difference is that Common project has [Serializable] and enabled "Make
> assembly COM-Visible"
>
>     [Serializable]
>     [Description("SimpleDictionary")]
>     public class SimpleDictionary : ISimpleDictionary
>     {
>     ...
>     }
>
> Any thoughts?
> Wonder if there is a way to list available class after AddReference().
>
> Thanks,
> Spark.
>
>
>
> On Thu, Apr 18, 2013 at 9:14 PM, Stephen P. Lepisto <
> stephenp at otakuworld.com> wrote:
>
>>  Try this from python with pythonNet installed (the current directory is
>> assumed to contain Adapter.dll):
>>
>> import clr
>> clr.AddReference("Adapter")        # Load the Adapter.dll
>> from AAA.BBB import Adapter    # Get the Adapter class type
>> adapter = Adapter()   # Create instance of the Adapter class
>> adapter.GetSpeed()    # Call the method
>>
>>
>>
>> On 4/18/2013 3:42 PM, Seungweon Park wrote:
>>
>> Thank you for the reply.
>>
>>  I did
>>
>>  >>> import clr
>> >>> from System.Reflection import Assembly
>> >>> Assembly.LoadWithPartialName("Adapter")
>> <System.Reflection.RuntimeAssembly object at 0x05381148>
>> >>> from AAA.BBB import Adapter
>> Traceback (most recent call last):
>>   File "<stdin>", line 1, in <module>
>> ImportError: No module named AAA.BBB
>>
>>  I don't know why I got this. :-(
>> Any idea?
>>
>>
>>
>> On Thu, Apr 18, 2013 at 3:07 PM, msutton <msutton at ucsd.edu> wrote:
>>
>>>  What I use is:
>>>
>>> import clr
>>> from System.Reflection import Assembly
>>> Assembly.LoadWithPartialName('Demo')
>>> from Render import Demo
>>>
>>> where the C# code has namespace Render and public class Demo.
>>>
>>> -Manuel
>>>
>>>
>>> On 04/18/2013 02:45 PM, Seungweon Park wrote:
>>>
>>>  Hi,
>>>
>>>  I have Adapter.dll with namespace 'AAA.BBB.Adapter" written in C#
>>> which gives network adapter information.
>>> I want to call one of method GetSpeed(). I don't know How to create an
>>> instance in python.
>>> Would you give me some clue for writing the same python code like below
>>> powershell script using python.net
>>> I don't see any sample code which python creates C# class instance.
>>>
>>>
>>>  Python
>>> ---------------------------
>>>  C:\CVS\Pythonnet>npython
>>> Python 2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit
>>> (Intel)] on win32
>>> Type "help", "copyright", "credits" or "license" for more information.
>>> >>> import os,sys
>>> >>>
>>> sys.path.append("c:\\cvs\\powershelliteexample\\networktestlibrary\\iteextensions")
>>> >>> sys.path
>>> ['', 'C:\\Python27\\lib\\site-packages\\paramiko-1.10.0-py2.7.egg',
>>> 'C:\\CVS\\Python\\libs', 'C:\\Windows\\system32\\pyt
>>> hon27.zip', 'C:\\Python27\\Lib', 'C:\\Python27\\DLLs',
>>> 'C:\\Python27\\Lib\\lib-tk', 'C:\\CVS\\Pythonnet', 'C:\\Python27'
>>> , 'C:\\Python27\\lib\\site-packages',
>>> 'C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\',
>>> 'c:\\cvs\\powershelliteexam
>>> ple\\networktestlibrary\\iteextensions']
>>> >>> import clr
>>> >>> clr.FindAssembly("Adapter")
>>>
>>> u'c:\\cvs\\powershelliteexample\\networktestlibrary\\iteextensions\\Adapter.dll'
>>> >>> clr.AddReference("Adapter")
>>> <System.Reflection.RuntimeAssembly object at 0x052028A0>
>>>
>>>  I don't know how to create an instance of Adapter.
>>>
>>>
>>>  Thank you,
>>> Spark.
>>>
>>>
>>>  Powershell
>>> ----------------------------
>>> PS C:\CVS\PowershellITEExample> Import-Module .\LoadAdapter.psd1
>>>  PS C:\CVS\PowershellITEExample> $adapter = New-object -type
>>> "AAA.BBB.Adapter"
>>> PS C:\CVS\PowershellITEExample> $ret =
>>> $adapter.GetAdapter("TestAdapter", "oids.xml")
>>> PS C:\CVS\PowershellITEExample> $ret.Passed
>>> True
>>> PS C:\CVS\PowershellITEExample> $baseAdapter = $ret.FunctionReturnValue
>>> PS C:\CVS\PowershellITEExample> $baseAdapter.GetSpeed()
>>>
>>>  Passed              : True
>>> Failed              : False
>>> Errored             : False
>>> Status              : Pass
>>> Description         : Speed retrieved successfully.
>>> FunctionReturnValue : auto
>>>
>>>
>>>  _________________________________________________
>>> Python.NET mailing list - PythonDotNet at python.orghttp://mail.python.org/mailman/listinfo/pythondotnet
>>>
>>>
>>>
>>
>>
>> _________________________________________________
>> Python.NET mailing list - PythonDotNet at python.orghttp://mail.python.org/mailman/listinfo/pythondotnet
>>
>>
>> --
>> Stephen P. Lepisto
>>
>>
>> _________________________________________________
>> Python.NET mailing list - PythonDotNet at python.org
>> http://mail.python.org/mailman/listinfo/pythondotnet
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/pythondotnet/attachments/20130419/2fa9f6d4/attachment-0001.html>


More information about the PythonDotNet mailing list