如果我有这个简单的代码
void voidFunct() {
printf("voidFunct called!!!\n");
}
我把它编译成一个动态库
gcc -c LSB.c -o LSB.o
gcc -shared -Wl -o libLSB.so.1 LSB.o
我从python解释器调用函数,使用ctypes
>>> from ctypes import *
>>> dll = CDLL("./libLSB.so.1")
>>> return = dll.voidFunct()
voidFunct called!!!
>>> print return
17
为什么从void
方法返回的值是17
,而不是None
或类似的值?谢谢您。
那是不确定的行为。您要求ctypes读取一个根本不存在的返回值。它从堆栈中读取一些内容,但返回的内容定义不清。
从文档中:
简而言之,将voidFunct()定义为返回
int
的函数,而不是void,Python希望它返回一个int
(无论如何,它得到的是一个随机值)。您可能应该做的是显式地声明返回值类型
None
。相关问题 更多 >
编程相关推荐