我想從使用ctypes的Python調用C++函數add_two_U。功能add_two_U在C++頭文件中定義爲:如何使用沒有輸入參數的ctypes調用函數?
extern ExternalInputs_add_two add_two_U;
結構ExternalInputs_add_two在頭文件中定義爲:
typedef struct {
int32_T Input; /* '<Root>/Input' */
int32_T Input1; /* '<Root>/Input1' */
} ExternalInputs_add_two;
功能add_two_initialize我在下面我的Python代碼中調用被定義在頭文件爲:
extern void add_two_initialize(boolean_T firstTime);
我的Python代碼:
import sys
from ctypes import *
class ModelInput(Structure):
_fields_ = [("Input", c_int),
("Input1", c_int)]
#define the functions
initiateModel = cdll.add_two_win32.add_two_initialize
U_Model = cdll.add_two_win32.add_two_U
# define the pointers to the functions
initiateModel.restype = c_void_p
U_Model.restype = c_void_p
#initialize the model with value of 1
print "\n\nInitialize"
errMsg = initiateModel(1)
print "initateModel reports:", errMsg
#Initialize the structure and get the pointer.
test_input = ModelInput(1,2)
input_ptr = pointer(test_input)
我想通過變量U_Model在python代碼中調用函數add_two_U。請注意,頭文件中此函數沒有任何輸入參數,並使用頭文件中的結構來獲取輸入數據。
我有以下2個問題:
如何設置在我的Python代碼結構ExternalInputs_add_two結構將數據傳遞到
add_two_U
功能?如何在Python代碼中通過
U_Model
引用無參數add_two_U
的dll函數?如果我使用Python語句來調用函數:result = U_Model()
我得到以下錯誤:
WindowsError: exception: access violation reading 0xFFFFFFFF
我搜索上線的答案,但沒有找到一個在頭文件中初始化結構並調用沒有參數的函數的示例。
請注意,在我的Python代碼中,由於此函數具有輸入參數,因此我可以調用函數add_two_initialize thru initModel而無錯誤。
@斯科特我從你的另一個問題看,這似乎是你的答案。請你可以這樣標記它,點擊這個答案旁邊的勾號使它變綠。請閱讀有關所有細節的常見問題解答。 – 2011-03-25 13:42:00