私は、分光データを記録し、第三者のアプリケーションによって制御されるデバイスを持っています。自動化の目的で、アプリケーションのCOMインターフェイスを使用してPythonでデータを取得したいと考えています。パイソンからAPIを使用してのための適切な文書が存在しないので、私は成功した最初のフレームを取得し、別のWebソースからの次のコードを、収集:win32comラッパーのイントロスペクション方法は?
comtypes.client.GetModule(('{1A762221-D8BA-11CF-AFC2-508201C10000}', 3, 11))
import comtypes.gen.WINX32Lib as WinSpecLib
win32com.client.pythoncom.CoInitialize()
doc = win32com.client.Dispatch("WinX32.DocFile")
buffer = ctypes.c_float()
frame = 1
spectrum = doc.GetFrame(frame, buffer)
をしかし、GetFrame
への呼び出しは、Visualにおけるその定義と矛盾しています製造業者によって提供される基本的な、:Visual Basicの配列に
Sub GetFrame(frame As Integer, buffer As Variant)
GetFrame
コピー文書からデータを。buffer
が空のバリアントである場合、GetFrame
は、適切なサイズとデータ型の配列を作成し、データをコピーする前にバッファをポイントするように設定します。
これは、Python buffer
に変わらなく、機能GetFrame
は、実際のデータを返すないのに対し、機能GetFrame
は、戻り値はありませんしながら、Visual Basicで変数buffer
がデータで満たされていることを意味しています。
プログラムのランダムなクラッシュがMemoryError
を投げているのを観察していないと、コードのこの時点でメモリリークが発生しているとは限りません。だから私の疑問は、への各呼び出しのために、win32com
が何らかの形でAPIのラッピングを混乱させたために、バッファ用に割り当てられたメモリが解放されていないということです。
その理由は私の実際の質問につながります。どのようにしてラッパーをイントロスペクションして、それが何をしているのか理解できますか?これまでのところ、win32com
によって生成されたコードがどのファイルにも格納されているというヒントは見つかりませんでしたが、正しい場所を見ていない可能性があります。
はIPythonで、私はまたdoc.GetFrame??
を使用して情報を取得しようとしましたが、それはどのような実装を返しませんでした:
Signature: doc.GetFrame(frame=<PyOleMissing object at 0x06F20BC8>, FrameVariant=<PyOleMissing object at 0x06F20BC8>)
Docstring: <no docstring>
File: c:\programming\python\src\<comobject winx32.docfile>
Type: method
他に何私はAPIラッパーに関する詳細情報を入手しようとすることができますか?