我正在使用ctypes并在Python 2.5中加载msvcrt.dll。
>>> from ctypes import *
>>> libname = 'msvcrt.dll'
>>> libc = CDLL(libname)
>>> libc.printf("Hello World\n")
12
>>>
为什么不打印Hello World
?
答案 0 :(得分:5)
为什么不打印Hello World?
在我的Python(ActiveState,2.6)中,当从控制台运行时:
>>> from ctypes import *
>>> libc = CDLL('msvcrt.dll')
>>> libc.printf("Hello world\n")
Hello world
12
答案 1 :(得分:3)
C printf()
函数本身被定义为返回打印到输出的字符数。这是Python在调用libc.printf()
时收到的值。
ctypes
tutorial提供了有关为什么printf()
的输出可能无法在您的Python REPL中工作的信息(我的通灵调试技能表明您正在运行Windows GUI IDLE)。
答案 2 :(得分:0)
对于其他来到这里并且无法在Python 3.x上运行的人,原因是that you must pass a bytes string (b"whatever")不是常规的python文字字符串。
所以这段代码适用于我的OSX High Sierra:
from ctypes import *
libc = CDLL('/usr/lib/libc.dylib')
message_string = 'Hello world\n'
libc.printf(b"Testing: hello world")
答案 3 :(得分:-1)
我不知道ctypes在Windows系统中是如何工作的,但是当我使用ubuntu系统时,我这样写: libc = CDLL(" libc.so.6") 那么,你的libs有问题吗?