[IronPython] COM Question
Nenad
propadovic.nenad at debitel.net
Wed Nov 8 22:22:55 CET 2006
Hello everybody,
I'm using IronPython to automate Enterprise Architect (an UML Tool)
via COM.
I've translated the VB.Net code from their examples to Python, in
order to get hold of some objects (diagrams and elements in diagrams
etc.).
from System import Console, Object
import clr
clr.AddReference("EA.dll")
from EA import AppClass
def RunAll():
App = AppClass()
m_Repository = App.Repository
m_Repository.OpenFile(r"d:\Projekti\UML\Automotive Testing Exploration.eap")
#use the Repository in any way required
DumpModel(m_Repository)
m_Repository.Exit()
m_Repository = None
def DumpModel(m_Repository):
for idx in range (0, m_Repository.Models.Count):
DumpPackage("",m_Repository.Models.GetAt(idx))
Console.WriteLine("" + m_Repository.Models.GetAt(idx).Name)
def DumpPackage(Indent, Package):
"""output package name, then element contents, then process child packages"""
Console.WriteLine(Indent + Package.Name)
DumpElements(Indent + " ", Package)
for idx in range(0,Package.Packages.Count):
DumpPackage(Indent + " ", Package.Packages.GetAt(idx))
.....
I get the following error:
File C:\IronPython-1.0\Tutorial\ea_go.py, line 35, in Initialize
File C:\IronPython-1.0\Tutorial\ea_go.py, line 11, in RunAll
File C:\IronPython-1.0\Tutorial\ea_go.py, line 18, in DumpModel
File C:\IronPython-1.0\Tutorial\ea_go.py, line 23, in DumpPackage
SystemError: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
So basically it says, m_Repository.Models.GetAt(idx) is not Object,
because m_Repository.Models is not initialized.
Uuups. It seems IronPython doesn't cope with all COM nuances as well
as VB.Net does?
I'd bee greatefull for a clue.
Thanks to all in advance!
Nenad
P.S. The corresponding VB.Net code works just fine:
Module Module1
Dim f As Object
Sub Main()
Call Run()
End Sub
''class level variable for Repository
Public m_Repository As Object
Public Sub Run()
'Microsoft.VisualBasic.FileOpen(1, "c:\Temp\ea_mdl.txt", OpenMode.Append)
''create the repository object
m_Repository = CreateObject("EA.Repository")
''open an EAP file
m_Repository.OpenFile("d:\Projekti\UML\Automotive Testing Exploration.eap")
''use the Repository in any way required
DumpModel()
''close the repository and tidy up
m_Repository.Exit()
m_Repository = Nothing
Console.WriteLine("Wir sind durch")
End Sub
Sub DumpModel()
Dim idx As Integer
For idx = 0 To m_Repository.Models.Count - 1
DumpPackage("", m_Repository.Models.GetAt(idx))
Next
End Sub
'output package name, then element contents, then process child packages
Sub DumpPackage(ByVal Indent As String, ByVal Package As Object)
Dim idx As Integer
Console.WriteLine(Indent + Package.Name)
'WriteLine(Indent + Package.Name)
DumpElements(Indent + " ", Package)
For idx = 0 To Package.Packages.Count - 1
DumpPackage(Indent + " ", Package.Packages.GetAt(idx))
Next
End Sub
.....
End Module
More information about the Ironpython-users
mailing list