Emi*_*lio 5 python ctypes return-value dynamic-library
为什么我有这个简单的代码
void voidFunct() {
printf("voidFunct called!!!\n");
}
Run Code Online (Sandbox Code Playgroud)
我将其编译为动态库
gcc -c LSB.c -o LSB.o
gcc -shared -Wl -o libLSB.so.1 LSB.o
Run Code Online (Sandbox Code Playgroud)
我使用ctypes从python解释器调用函数
>>> from ctypes import *
>>> dll = CDLL("./libLSB.so.1")
>>> return = dll.voidFunct()
voidFunct called!!!
>>> print return
17
Run Code Online (Sandbox Code Playgroud)
为什么从void
方法返回的值是17
和不None
相似?谢谢.
Boa*_*niv 19
来自文档:
class ctypes.CDLL(name,mode = DEFAULT_MODE,handle = None,use_errno = False,use_last_error = False)此类的实例表示已加载的共享库.这些库中的函数使用标准C调用约定,并假定返回int.
简而言之,你将voidFunct()定义为一个函数返回int
,而不是void,并且Python期望它返回一个int
(无论如何,它以某种方式得到它 - 它恰好是一个随机值).
您应该做的是明确声明返回值类型None
.
dll.voidFunct.restype = None
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6439 次 |
最近记录: |