Is it possible to pass a python string by reference through ctypes?

后端 未结 2 1414
长发绾君心
长发绾君心 2020-12-18 08:02

I\'m sorry, but I generally have a hard time reading the current ctypes docs...

If I have a C function that takes a const char * pointer, and I know

2条回答
  •  失恋的感觉
    2020-12-18 08:21

    The type ctypes.c_char_p represents a nul-terminated string. If a function takes a const char* you can pass a Python string to it and it will receive a nul-terminated version.

    A Windows example DLL:

    #include 
    
    __declspec(dllexport) char* func(char* a,size_t len,const char* b)
    {
        if(strlen(b) * 2 >= len)
            return NULL;
        strcpy_s(a,len,b);
        strcat_s(a,len,b);
        return a;
    }
    

    Python:

    Python 2.7.1 (r271:86832, Nov 27 2010, 18:30:46) [MSC v.1500 32 bit (Intel)] on win32
    Type "help", "copyright", "credits" or "license" for more information.
    >>> from ctypes import *
    >>> x=CDLL('x')
    >>> x.func.restype=c_char_p
    >>> x.func.argtypes=[c_char_p,c_int,c_char_p]
    >>> s=create_string_buffer(10)
    >>> x.func(s,len(s),'abcd')
    'abcdabcd'
    >>>
    

提交回复
热议问题