2017-12-21 3 views
2

Win32com.clientモジュールを使い、COMインターフェースを使用してMicroStationを制御するPythonプログラムを作成してみました。 Excelから。COM定義の型からcom_recordオブジェクトを作成する

私が持っている問題は、COMライブラリ、com_record、つまり私の場合はPoint3dで定義された型のオブジェクトを作成することです。 Point3dは、基本的に3つのX、Y、Zの3つのC構造です。 Excelで

struct Point3d { 
    double X; 
    double Y; 
    double Z; 
} 

MicrostationDGNのライブラリを参照した後、私はPoint3dとデータ型へのアクセスを持っていたし、簡単に私はPythonで同じことを行うことができますどのようにDim newpoint As Point3d

で新しい変数を定義することができますか?ありがとう、

私はCの構造体を作成しようとしたが、それは私にあなたがnamed tupleを探しているエラー

from ctypes import Structure, c_double 

class Point3d(Structure): 
    _fields_ = [('X', c_double), 
       ('Y', c_double)] 

startPoint = Point3d() 
startPoint.X = 1 
startPoint.Y = 1 

TypeError: Only com_record objects can be used as records 
+0

私はここにいくつかの情報http://python.6.x6.nabble.com/How-to-create-a-com-record-td1953557.htmlを見つけましたが、私はまだ作り方見当もつかないcom_recordオブジェクトが必要です。 – Alex

答えて

0

を与えます。

(おおよそ)あなたが欲しいドキュメントからの引用:

Point3d = namedtuple('Point3d', ['x', 'y', 'z']) 
+0

返信いただきありがとうございます!私はちょうど試しましたが、同じエラーを生成します... TypeError:com_recordオブジェクトのみをレコードとして使用できます – Alex

+0

申し訳ありません。私はあなたをctypesから純粋なpython(tupleという名前の)アプローチに導いていました。しかし、結果のポイントオブジェクトをあなたの質問に記載されていないルーチンに渡すつもりなら、そのインターフェイスのドキュメントに従わなければなりません。コメントには、Pythonの移植可能なctypeサポートではなく、Windows固有のCOMサポートを使用することを示すURLがあります。 –

0

を、私は、ライブラリの作者からこれを見つけた:私は見つけることができませんでした

r = win32com.client.Record("RecordName", object) 

where "RecordName" is the name of the record, and 'object' is &any* COM object defined in the same type library.

https://mail.python.org/pipermail/python-list/2003-August/214888.html

この型のオブジェクトを使用して、説明したようにcom_recordをインスタンス化しましたが、 ns必要なオブジェクト。

startPoint = MS.Point3dFromXYZ(2.0,2.0,0.0) 
関連する問題