Python如何从C函数接收字符串?

时间:2015-12-28 08:32:41

标签: python c++

C代码:

#include "Python.h"
#include <windows.h>
__declspec(dllexport) PyObject* getTheString()
{
    auto p = Py_BuildValue("s","hello");
    char * s = PyString_AsString(p);
    MessageBoxA(NULL,s,"s",0);
    return p;
}

Python代码:

import ctypes
import sys
sys.path.append('./')
dll = ctypes.CDLL('pythonCall_test.dll')
print type(dll.getTheString())

结果:

<type 'int'>

如何从C代码中获取pytype(str)'hello'?或者是否有任何Pythonic方式将此pytype(int)翻译为pytype(str)

看起来无论我改变什么,返回的Pyobject*都是pytype(int)没有其他

2 个答案:

答案 0 :(得分:2)

  

默认情况下,假定函数返回C int类型。其他   可以通过设置的restype属性来指定返回类型   功能对象。   (ref)

定义函数返回的类型:

>>> from ctypes import c_char_p
>>> dll.getTheString.restype = c_char_p # c_char_p is a pointer to a string
>>> print type(dll.getTheString())

答案 1 :(得分:0)

int是默认的返回类型,用于指定设置函数对象restype属性所需的其他类型。有关详细信息,请参阅ctype文档中的Return types