【发布时间】:2014-10-30 18:58:48
【问题描述】:
我创建了一个简单的 C 库文件来测试如何使用 ctypes 访问 C 函数。
C 文件中名为 tetr.c 的函数内容如下:
double square(double x){
return x*x;
}
所以它返回数字的平方。
我已使用以下代码将其编译为目标文件:
gcc -c tetr.c -o tetr.o
并使用以下方式共享对象文件:
gcc -shared -Wl,-soname,library.so -o tetr.so tetr.o
到目前为止一切顺利。我调用 ipython shell,并将我的库设置为变量 lib:
import ctypes
lib = ctypes.cdll.LoadLibrary("tetr.so")
当然,当我打电话给lib.square(ctypes.c_double(2.0)) 时,它应该给我4.0。相反,我得到1。我在函数 square 中插入的任何数字都会发生同样的情况,甚至是零。
一个简短的通知,我在我的函数中使用了ctypes.c_double,因为没有它,当我输入一个整数时我得到零并且
ArgumentError: argument 1: <type 'exceptions.TypeError'>: Don't know how to convert parameter 1
当我输入浮点数/双精度时。
有什么想法我可能做错了吗?
【问题讨论】:
-
是否也需要转换(强制转换)返回值?
-
我不明白为什么我应该这样做。不过会尝试一下,谢谢你的想法。
-
你需要告诉
ctypes该函数返回一个double。它自己无法弄清楚,所以除非你告诉它,否则它假定每个函数的返回类型都是int。见docs.python.org/2/library/ctypes.html#return-types -
谢谢,除了将参数类型设置为
double之外,还可以。 -
如果您可以重写此评论作为对帖子的回答,我会检查它作为解决方案。
标签: c python-2.7 ctypes