Python 和 C语言的相互调用

第一种、Python调用C动态链接库(利用ctypes)
下面示例在linux或unix下可行。
pycall.c
1 2 3 4 5 6 7 8 | #include <stdio.h>
#include <stdlib.h>
intfoo(inta, intb)
{
printf("you input %d and %d\n", a, b);
returna+b;
}
|
pycall.py
1 2 3 4 5 | importctypes
ll =ctypes.cdll.LoadLibrary
lib =ll("./libpycall.so")
lib.foo(1, 3)
print\'***finish***\'
|
运行方法:
gcc -o libpycall.so -shared -fPIC pycall.c
python pycall.py
第2种、Python调用C++(类)动态链接库(利用ctypes)
pycallclass.cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | #include <iostream>
usingnamespacestd;
classTestLib
{
public:
voiddisplay();
voiddisplay(inta);
};
voidTestLib::display() {
cout<<"First display"<<endl;
}
voidTestLib::display(inta) {
cout<<"Second display:"<<a<<endl;
}
extern"C"{
TestLib obj;
voiddisplay() {
obj.display();
}
voiddisplay_int() {
obj.display(2);
}
}
|
pycallclass.py
1 2 3 4 5 6 7 | importctypes
so =ctypes.cdll.LoadLibrary
lib =so("./libpycallclass.so")
print\'display()\'
lib.display()
print\'display(100)\'
lib.display_int(100)
|
运行方法:
g++ -o libpycallclass.so -shared -fPIC pycallclass.cpp
python pycallclass.py
第3种、Python调用C和C++可执行程序
main.cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #include <iostream>
usingnamespacestd;
inttest()
{
inta = 10, b = 5;
returna+b;
}
intmain()
{
cout<<"---begin---"<<endl;
intnum = test();
cout<<"num="<<num<<endl;
cout<<"---end---"<<endl;
}
|
main.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | importcommands
importos
main ="./testmain"
ifos.path.exists(main):
rc, out =commands.getstatusoutput(main)
print\'rc = %d, \nout = %s\'%(rc, out)
print\'*\'*10
f =os.popen(main)
data =f.readlines()
f.close()
printdata
print\'*\'*10
os.system(main)
|
运行方法(只有这种不是生成.so然后让python文件来调用):
g++ -o testmain main.cpp
python main.py
疑问:
Windows 如何实现?
REF
https://www.jb51.net/article/165362.htm
https://www.cnblogs.com/si-lei/p/10748612.html
https://www.cnblogs.com/fyly/p/11266308.html
以上是 Python 和 C语言的相互调用 的全部内容,
来源链接:
utcz.com/z/386492.html