On 2018-02-21 02:28, 赵亚 wrote: This "python-dev" list is for development of the Python language itself. I think that this message should instead have been sent to "python-list". > i have question:call,c-->python-->c. > 1.the c pointer void* abc="123" by pycapsule in the c code. > ...... > void* lpContext = "abc"; > PyObject * lpPyContext = PyCapsule_New(lpContext, "Context",NULL); > ...... Is this C code calling the function 'test' in the Python code? If yes, are you sure that lpPyContext should be in pArgs at index 1 and not at index 0? The function 'test' expects argument 0 => lpContext, argument 1 => lpRequest, argument 2 => lpAnswer. > PyTuple_SetItem(pArgs, 1, lpPyContext); > PyObject* pyResult = PyObject_CallObject(pFunc, pArgs); > > 2.c call python: > > in the python code: > import ctypes > pycapsule = ctypes.windll.LoadLibrary("C:\Users\zhaoya16975\Documents\Visual Studio 2017\Projects\cpython\Release\pycapsule.dll") > def test( lpContext,lpRequest,lpAnswer): > print lpContext > pycapsule.hello() > pycapsule.GetContext(lpContext) > ......... > the lpContest is "<capsule object "Context" at 0x02747e00>" > but,i can't lpContext in the pycapsule.GetContest: > the capsule is null poniter,the GetContext no execute!! > > void* FUNCTION_CALL_MODE GetContext(PyObject *capsule) { > printf(" GetContext......\n"); > //if (!PyCapsule_IsValid((PyObject *)capsule, "Context")) { > // printf(" the Capsule Context is no Valid\n"); > // return NULL; > //} > //return PyCapsule_GetPointer((PyObject *)capsule, "Context"); > return NULL; > > } > > FUNCTION_CALL_MODE is __stdcall i think no problem.because, if GetContext(PyObject *capsule) -->GetContext() is ok. PyObject *capsule from python to c unknown error occurred. > > i hope c call python pass void* ,and python call c pass void* ,but the capsule call no success? >
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4