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)
没有其他
答案 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。