我已經從第三方DLL加載函數。我已成功通過ctypes.windll.LoadLibrary
訪問作爲圖書館入口點的函數。該函數有30個參數,包括許多二維數組。函數原型指定參數在大多數情況下通過引用傳遞。當我進行函數調用時,我得到一個返回碼,表示內部變量有問題,這讓我認爲我已經通過了錯誤的指針。 (這很模糊。)我的問題是,在什麼情況下我應該使用ctypes.byref
作爲參考。例如,假設我有以下內容:Python,何時使用ctypes.byref作爲參考傳遞
double_matrix = (ctypes.c_double * 100) * 100
my_array = double_matrix()
我應該傳遞my_array還是ctypes.byref(my_array)?
my_string = ctypes.create_string_buffer("Hello world!")
那麼使用types.create_string_buffer()創建的對象呢?如果需要傳遞引用,我應該傳遞my_string還是ctypes.byref(my_string)?
編輯:
我沒有該DLL的代碼。
函數原型看起來基本上是這樣的,除了每種類型大概有5或6個。 (char * input,int indicator,double(* dmatrix)[100] [100],int(* groups)[100]);
感謝
WOHA,30個參數...如果代碼是你,你有沒有使用對象/結構考慮在傳遞參數之前將參數邏輯聚類? – 2013-05-09 23:18:20
您能否向我們展示該函數的C原型,而不是試圖用英文來描述它? (或者,更好的是,向我們展示一個不需要30個參數的精簡版本...) – abarnert 2013-05-09 23:30:52
我希望這是一個足夠好的函數描述。 – aetodd 2013-05-10 00:49:57