IronPython сопоставление с классом управляемого значения - PullRequest
0 голосов
/ 11 января 2012

Я пытаюсь использовать IronPython для автоматизации некоторых приложений CAD MicroStation через COM Interop DLL. Когда я пытаюсь получить «пользовательский тип» от объекта, он выдает мне ValueErrors. Мой быстрый код ниже:

import sys, clr, System, os
sys.path.append("C:\\Program Files (x86)\\Bentley\\MicroStation V8i (SELECTseries)\\MicroStation\\assemblies")
clr.AddReferenceToFile("bentley.interop.microstationdgn.dll")

from Bentley.Interop.MicroStationDGN import Application, Point2d, Point3d, TextElement

t = System.Type.GetTypeFromProgID("MicroStationDGN.Application")
ms = System.Activator.CreateInstance(t)

elem = ms.ActiveDesignFile.GetElementByID64(509)
coord = elem.Origin

ValueError: указанная запись не может быть сопоставлена ​​с классом управляемого значения.

elem.Origin должен дать мне объект Point3d ...

Однако, если я сделаю это:

>>> test = Point3d()
>>> Point3d.X.SetValue(test, 1)
>>> Point3d.Y.SetValue(test, 1)
>>> elem.Origin = test
>>> elem.Rewrite()

Я могу установить исходное значение элемента. (и я могу проверить в программном обеспечении САПР, что источник элемента сместился).

Я уверен, что мне не хватает какой-то простой вещи COM / IronPython, но я просмотрел документы, и ничего не выпрыгнуло на меня.

Буду признателен за любую помощь!

1 Ответ

0 голосов
/ 12 января 2012

Ах! Я прочитал это:

http://support.microsoft.com/kb/811445

Я должен был сначала зарегистрировать типы! Итак, я выполнил это:

C:\Windows\Microsoft.NET\Framework\v4.0.30319>regasm "C:\Program Files (x86)\Ben
tley\MicroStation V8i (SELECTseries)\MicroStation\assemblies\bentley.interop.mic
rostationdgn.dll"
Microsoft (R) .NET Framework Assembly Registration Utility 4.0.30319.1
Copyright (C) Microsoft Corporation 1998-2004.  All rights reserved.

Types registered successfully

C:\Windows\Microsoft.NET\Framework\v4.0.30319>

Сейчас:

>>> elem.Origin
<Bentley.Interop.MicroStationDGN.Point3d object at 0x000000000000002E [Bentley.Interop.MicroStationDGN.Point3d]>
>>> elem.Origin.X
1.0

Высокий.

...