[Python-Dev] pycapsule:PyObject * is NULL pointer

MRAB python at mrabarnett.plus.com
Tue Feb 20 22:18:18 EST 2018


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?
> 


More information about the Python-Dev mailing list