問題の走行機能をDLLファイルを使用ctypesオブジェクト指向Python
-
19-09-2019 - |
質問
思いこんで回答質問は愚かな。最近、私はプログラミングの数。交流するという目的に沿って間を創るために、試験プログラム。しかし私はencouteredていた、いくつかの問題を特定の計器の場合ようにしている電話機能するか"仮面"からの商品のDLLファイルです。利用の場合は、対話モードにおけるシェルでコンビニエンスストアでのお支(そのテルのすぐ近くは飲食面では貧弱言葉に気をつかう).しかし実施しての機能オブジェクト指向方法、プログラムが失敗すると、どんな失敗ではないものです。これは最初のメソッドされている:(ctypesとctypes.util輸入)
def init_hardware(self):
""" Inits the instrument """
self.write_log("Initialising the automatic tuner")
version_string = create_string_buffer(80)
self.error_string = create_string_buffer(80)
self.name = "Maury MT982EU"
self.write_log("Tuner DLL path: %s", find_library('MLibTuners'))
self.maury = WinDLL('MlibTuners')
self.maury.get_tuner_driver_version(version_string)
if (version_string.value == ""):
self.write_log("IMPORTANT: Error obtaining the driver version")
else:
self.write_log("Version number of the DLL: %s" % version_string.value)
self.ThreeTypeLong = c_long * 3
この作品のうねりのものは、取得し完璧にログイン作品の応募がありました。にしたものを試してみてください方法で、プログラム:
def add_tuner_and_controller(self, name, serial_number, tuner_number=0):
""" Adds the tuner to the driver object, controller is inside the tuner """
self.write_log("Adding tuner %d and the built-in controller" % tuner_number)
TempType = self.ThreeTypeLong()
self.maury.add_controller(c_short(tuner_number), c_char_p(self.file_path), c_char_p(name), c_int(0), c_int(0),
c_long(0), c_short(serial_number), self.error_string)
self.maury.add_tuner(c_short(tuner_number), c_char_p(name), c_short(serial_number), c_short(0),
c_short(1), pointer(c_double()), TempType, pointer(c_double()), pointer(c_double()),
pointer(c_double()), self.error_string)
のプログラムが急に動かなくなった/走行を続け、かつ、happenesきます。モーリ"ラインが呼び出されます。けた時のものinit_hardware方法でコンビニエンスストアでのお支んの顔が少しメモリ"error"とは何か、目標志向の構造です。ていきたいと思っておりますので続けるこのようにあるので、とにかく単離と機能にこの役職員に周知徹底しているか。はい限り、私は大きなチャンクのコードについて教えてください。
編集:
文書情報:
[凡例星を示すポインタ、ブラケットを示す配列]
のadd_tuner機能を追加または更新につチューナー、チューナーラオブジェクトです。
short add_tuner(short tuner_number, char model[ ], short serial_number, short ctlr_num, short ctlr_port, short *no_of_motors, long max_range[ ], double *fmin, double *fmax, double *fcrossover, char error_string[ ])
出力: no_motors, max_range (array of three numbers), fmin, fmax, fcrossover,error_string (80+ characters long), function-return->Error flag
のadd_controller機能を追加または更新につコントローラー、チューナーラオブジェクト
short add_controller(short controller_number, char driver[ ], char model[ ], int timeout, int address, long delay_ms, char error_string[ ])
出力: error_string, function-return->Error flag
解決 3
していることが分かったので電話の機能に輸出されDLLを使用したDLLを通じてパラメータの各方法です。(プログラムの輸出は、dllをそれぞれの方法で送付すパラメータで指定)になります。う言がなだけから電話をかけてきました。もう輸出のDLLとしてのクラスの属性。システムの仕事をしているのがん悪い思いがあboboo-コードのどこかで失敗します。全体的にフィードバックやヒント!
/Mazdak
他のヒント
なんなのかつ正確な問題であり、ここでのカップルで一般のヒント:
の方に機能する呼び出し以外のコンストラクタと、そのための設定 argtypes
このコンストラクタです。お客さま人数小児-幼児に宣言されたの argtypes
, んが重要でありすべての引数として c_short
, c_double
, など。ただ誤ってパス間違った引数Cの機能はPythonめにランタイムエラーの代わりにぶのDLL.
他の微細な使用 x = 0;
byref(x)
か POINTER
(c_double)()
の代わりにポインタ(c_double())をチューナー、コントローラです。
私は書いてあctypesの授業Python2.6最近ではどんな何をどのようないを記述する.そうでないPythonのバグ報告をするどちらと強く思いがあることを自分の詳細ないの両方を一望にする方法が問題です。
他のパラメータを追加-コントローラー追加-チューナーを実際に返します。
ることを強くお勧めし定義する試作品の機能により呼び出して直円柱のすべてのパラメータ。
ていらっしゃることだと思いますねこのページをお読みて, が、表記(ローマ字表記)に関していくプロセスが機能についてプロトタイプを作製。このコードもクリーンや微量/debug.
も--としてマークRushakoffつものを使用ポインタ(c_double())のようにお話はヴ.いいよねw/ポインタにおける再まpredeclareの値を変数として、パスを変数に機能する。その上のてご検討いただくことができ、その値がその後のための不思議な行動です。
編集:お試作を呼び出するとこんな感じにな:
prototype = WINFUNCTYPE(
c_int, # Return value (correct? Guess)
c_short, # tuner_number
c_char_p, # file_path
c_char_p, # name
c_int, # 0?
c_int, # 0?
c_long, # 0?
c_short, # serial_number
c_char_p, # error_string
)
# 1 input, 2 output, 4 input default to zero (I think; check doc page)
paramflags = (1, 'TunerNumber' ), (1, 'FilePath' ), (1, 'Name' ), ...
AddController = prototype(('add_controller', WinDLL.MlibTuners), paramflags)
その後お電話はクリーナー:
arg1 = 0
arg2 = 0
arg3 = 0
AddController(tuner_number, self.file_path, name, arg1, arg2, arg3,
serial_number, self.error_string)