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

赵亚 zhaoya881010 at 163.com
Tue Feb 20 23:34:23 EST 2018



hi @MRAB
i try again,it not ok. test files:
1.cpython.cpp ---c call python maintenance.py
2.maintenance.py  python maintenance.py call pycapsule.cpp(dll)
the code file,see attachment.








At 2018-02-21 11:18:18, "MRAB" <python at mrabarnett.plus.com> wrote:
>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?
>> 
>_______________________________________________
>Python-Dev mailing list
>Python-Dev at python.org
>https://mail.python.org/mailman/listinfo/python-dev
>Unsubscribe: https://mail.python.org/mailman/options/python-dev/zhaoya881010%40163.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-dev/attachments/20180221/097f7fd5/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: maintenance.py
Type: application/octet-stream
Size: 512 bytes
Desc: not available
URL: <http://mail.python.org/pipermail/python-dev/attachments/20180221/097f7fd5/attachment.obj>
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: cpython.cpp
URL: <http://mail.python.org/pipermail/python-dev/attachments/20180221/097f7fd5/attachment.ksh>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: cpython.h
Type: application/octet-stream
Size: 208 bytes
Desc: not available
URL: <http://mail.python.org/pipermail/python-dev/attachments/20180221/097f7fd5/attachment-0001.obj>
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: pycapsule.cpp
URL: <http://mail.python.org/pipermail/python-dev/attachments/20180221/097f7fd5/attachment-0001.ksh>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: pycapsule.def
Type: application/octet-stream
Size: 160 bytes
Desc: not available
URL: <http://mail.python.org/pipermail/python-dev/attachments/20180221/097f7fd5/attachment-0002.obj>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: pycapsule.h
Type: application/octet-stream
Size: 566 bytes
Desc: not available
URL: <http://mail.python.org/pipermail/python-dev/attachments/20180221/097f7fd5/attachment-0003.obj>


More information about the Python-Dev mailing list