簡體   English   中英

如何將char []整齊地傳遞給Python C擴展中的PyObject_CallMethod

[英]How to neatly pass char[] to PyObject_CallMethod in Python C extension

我有一個名為“ m1”的python對象,該對象具有一個方法“ coor()”。 我將其傳遞給C“ ++”擴展名並在其中調用“ coor()”。 首先,我嘗試了:

PyArrayObject *coor = (PyArrayObject *) PyObject_CallMethod(m1,"coor","()",NULL);

並發現以下尷尬的代碼有效:

char t1[]="coor, t3[]="()";
PyArrayObject *coor = (PyArrayObject *) PyObject_CallMethod(m1,t1,t3,NULL);

我相信有一個簡單的方法可以做到這一點。 對於初學者來說,這可能是對char []的一個C問題,並感謝您的建議。

該文件說:

格式可以為NULL ,表示未提供任何參數。

另外,不需要數組。 使您認為需要數組的原因可能是字符串未聲明為常量:

PyObject* PyObject_CallMethod(PyObject *o, char *method, char *format, ...)

但是,它們實際上並沒有被修改。 看源頭 ; method僅傳遞給PyObject_GetAttrStringPyErr_SetString ,它們都使用const char * s。 因此,將const char *文字轉換為char *應該是安全的,盡管真正的解決方案是Python 將聲明的參數類型更改為const char *

無論如何,這是這樣的:

result = object.method()

將大致轉換為:

PyObject *result = PyObject_CallMethod(object, (char *)"method", NULL);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM