2
A
回答
3
由於我一直在努力解決這個問題一段時間,所以我決定寫一個小小的HowTo,這樣其他人就可以受益。
有了這款C一段代碼:
void passPointerArray(int size, char **stringArray) {
for (int counter=0; counter < size; counter++) {
printf("String number %d is : %s\n", counter, stringArray[counter]);
}
}
我們要使用ctypes的(約ctypes的更多信息可以在以前的文章中找到)從蟒蛇調用它,所以我們寫下如下代碼:
def pass_pointer_array():
string_set = [
"Hello",
"Bye Bye",
"How do you do"
]
string_length = len(string_set)
select_type = (c_char_p * string_length)
select = select_type()
for key, item in enumerate(string_set):
select[key] = item
library.passPointerArray.argtypes = [c_int, select_type]
library.passPointerArray(string_length, select)
現在,我讀它,它似乎很簡單,但我享受了很多找到適當的類型,請通過ctypes的,以避免分段錯誤...
相關問題
- 1. 使用ctypes從Python調用fortran函數
- 2. 調用使用從C++方法
- 3. 無法從使用ctypes從python調用的c庫中獲取pi
- 4. C#調用C++使用char **參數
- 5. 使用ctypes從python調用C++:g ++ undefined reference
- 6. 使用ctypes調用FORTRAN DLL
- 7. 從.NET調用C++方法
- 8. 從Tableau調用C#方法
- 9. 從IronPython調用C#方法
- 10. 從C調用onclick方法#
- 11. C++從方法調用EXE
- 12. 使用ctypes將python字符串對象轉換爲c char *
- 13. 使用ctypes在Python中解碼C const char *
- 14. Objective-C從類方法調用方法
- 15. 如何調試C++ dll的ctypes調用?
- 16. 通話使用char *從C#
- 17. Ctypes - 從使用ctypes的python代碼獲取C backtrace
- 18. C++不能調用方法(使用模板)從模板方法
- 19. 如何從C++返回char **並使用ctypes將其填充到Python列表中?
- 20. 從Obj-C/Obj-C++使用C++對象 - 調用外部方法
- 21. 從Java調用到C++,然後從相同的C++方法調用java方法
- 22. 在python中使用ctypes來訪問C#dll的方法
- 23. 從C代碼調用C++方法
- 24. 外部C方法調用從C#
- 25. 從C++調用Objective-C類方法
- 26. 從C++調用(C#).NET Core方法
- 27. 從GeckoFX調用C#方法C#controll(winforms)
- 28. 從C++調用靜態C#方法
- 29. C++調用方法
- 30. 從qt調用java方法從c +
如果C函數修改字符串,用'create_string_buffer'創建'c_char'數組,例如'select =(POINTER(c_char)* len(string_set))(* map(create_string_buffer,string_set))'。 – eryksun
然後我應該使用哪種參數類型? –
如果類型安全不是問題,你可以使用'c_void_p'。這將接受任何指針類型。你也可以使用'POINTER(POINTER(c_char))'。但是,ctypes類型系統是不可寬恕的,所以如果你在'c_char_p'數組中混合,你必須首先''cast'以防止抱怨。 – eryksun