2012-04-26 23 views
1

DLL(C言語)link("parameters", &connection);の関数は、文字列パラメータを受け取り、接続を初期化します。関数の引数としてオブジェクトを渡す

があります。は、link()を呼び出して初期化されたオブジェクトです。

私は、引数

connection_t = ctypes.c_uint32 
link = mydll.link 
link.argtypes=(ctypes.c_char_p, ctypes.POINTER(connection_t)) 
connect = mydll.connect 
connect.argtypes=(connection_t,) 
... 
connection = connection_t() 
link ("localhost: 5412", ctypes.byref(connection)) 
... 

として機能connect()にPythonの接続オブジェクトを渡ししかし、私はMYDLLライブラリの他の関数に「接続」オブジェクトを転送する場合、関数は値を返しますが、値が正しくありません。この例ではresult=0

func=mydll.func 
status_t=ctypes.c_uint32 
status=status_t() 
func.argtypes=(ctypes.c_ulong,ctypes.POINTER(status_t)) 
result=func(connection, ctypes.byref(status)) 

が、このコードのC-変異体でIは正しい値(0でない)

なぜを受信? C APIを記述したあなたのコメントに基づいて

+0

はあなたが探している必要がありよろしいです「結果」ではなく「ステータス」で? – yak

+0

'connection_t'は' ctypes.c_uint32'ですが、最初の 'func.argtypes'は' ctypes.c_ulong'ですか? – martineau

+0

yak、申し訳ありませんが、私は 'ステータス'の値を意味します。しかし、 'status'が正しくない場合、 'result'の値も正しくありません。 – KLM

答えて

0

link(const char* set, conn_type* connection); 
func(conn_type* connection, uint32_t* status); 

funcが接続タイプへのポインタを取りますので、コードのようなものでなければなりません:

mydll=ctypes.CDLL('mydll') 
connection_t = ctypes.c_uint32 
link = mydll.link 
link.argtypes=(ctypes.c_char_p, ctypes.POINTER(connection_t)) 
connection = connection_t() 
link("localhost: 5412", ctypes.byref(connection)) 

func=mydll.func 
status_t=ctypes.c_uint32 
status=status_t() 
func.argtypes=(ctypes.POINTER(connection_t),ctypes.POINTER(status_t)) 
result=func(ctypes.byref(connection), ctypes.byref(status)) 
関連する問題