在各个平台上用python来调用C语言库(C语言内置的一些函数)的方式不一样。

  • Windows调用:libc = cdll.msvcrt
  • Linux调用: libc = CDLL("libc.so.6")
  • Mac调用:libc = CDLL("libc.dylib")
  • 使用C的printf函数: libc.printf(b "hello world")

Python判断操作系统

不需要为每个系统写一套代码,可以通过python来直接判断平台。

先用import platform导入模块,然后调用platform.system()可以返回系统的名称 (分别是Darwin Linux Windows )。

python跨平台调用C语言库

testclib.py

print("Test C Lib")
from ctypes import *
from platform import system
sys = system()
if sys == "Windows":
    libc = cdll.msvcrt
elif sys == "Linux":
    libc = CDLL("libc.so.6")
elif sys == "Darwin":
    libc = CDLL("libc.dylib")
else:
    printf("unknow system")

libc.printf(b"Python string %s %d", b"str001", 1001)

调用windows系统函数

我们来使用ctypes调用win32的MessageBox

testwinapi.py

print("Test Win API")

from ctypes import *
re = windll.user32.MessageBoxA(0, "窗口内容".encode("gbk"),"请选择".encode("gbk"), 1) 
if re == 1:
    windll.user32.MessageBoxW(0, "点击了确认按钮","已选择", 0)
else:
    windll.user32.MessageBoxW(0, "点击了取消按钮","已选择", 0)

运行程序可正常弹出对话框

注意:在win32当中调函数可以直接调用`MessageBox`,不用区分`MessageBoxA`和`MessageBoxW`,因为`MessageBox`其实是一个宏,它根据当前编码的字符集来决定调用`MessageBoxA`还是`MessageBoxW`,而这个宏在python中肯定是访问,所以需要明确指明调用`MessageBoxA`还是`MessageBoxW`
© liangqi all right reserved,powered by Gitbook文件修订时间: 2019-05-25

results matching ""

    No results matching ""