1

私はPythonが初めてで、PythonからC関数を呼び出そうとしていて、2つの変数を受け取りたいと思っています。簡単にするために、サンプル コードを表示します。

#include <Python.h>
#include <stdio.h>

PyObject* foo(char *p)
{
    printf("%s\n", p);
    return Py_BuildValue("ii", 2, 2);

}

>>> from ctypes import cdll
>>> lib = cdll.LoadLibrary('./lib1.so')
>>> d = lib.foo('hello')
hello
>>> d
43128392

正しい値が出力されないのはなぜですか?

コンパイル コマンド: gcc -c -IC:\Python26\include 1.c -o 1.o

gcc -shared -Wl,-soname,lib1.so -o lib1.so 1.o -LC:\Python26\libs -LC:\Python26\PCbuild -lpython26

4

1 に答える 1

2

デフォルトでは、ctypes関数が返されることを期待してintおり、オブジェクトを返しています。関数の戻り値を変更する必要があります。

from ctypes import cdll, py_object
lib = cdll.LoadLibrary('./lib1.so')

d = lib.foo('hello')
print d                     # prints address of object

lib.foo.restype = py_object # change the result type
d = lib.foo('hello')
print d                     # prints (2, 2) as expected

詳細については、http: //docs.python.org/2/library/ctypes.html#return-typesをご覧ください。

于 2013-06-28T07:39:31.500 に答える