
修改文件夹名字的方式排查,命令行 import ctypes 用的是 python 目录下 lib/ctypes 文件夹下的文件,而编译环境用的是同一个 python 目录(修改python文件夹名无法编译),但是修改 lib/ctypes 文件夹名,仍能编译通过 import ctypes。
直接将函数参数,定义为结构体指针类型即可。
然后传入对应结构体数组名,或者结构体变量的地址。
比如
struct test {int a;};
struct test t[100];
定义
void func(struct test p){}
调用
func(t);
使用Python的ctypes,我们可以直接调用由C直接编译出来的函数。其实就是调用动态链接库中的函数。为什么我们需要这样做呢,因为有些时候,我们可能需要一个性能上比较讲究的算法,有些时候,我们可以在Python中使用已经有了的现成的被封闭在动态链接库中的函数。下面是如何调用的示例。
首先,我们用一个乘法来表示一个算法功能。下面是C的程序:
int multiply(int num1, int num2){
return num1 num2;
}
如果在Windows下,你可能需要写成下面这个样子:
#include <windowsh>
BOOL APIENTRYDll
Main(HANDLE hModule, DWORD dwReason, LPVOID lpReserved){
return TRUE;
}
__declspec(dllexport)
intmultiply(int num1, int num2){
return num1 num2;
}
然后,自然是把这个C文件编成动态链接库:
Linux下的编译:
gcc -c -fPIC libtestc
gcc -shared libtesto -o libtestso
Windows下的编译:
cl -LD libtestc -libtestdll
于是在我们的Python中可以这样使用:
(其中的libtestso在Windows下改成libtestdll即可)
>>> from ctypes import
>>> import os
>>> libtest = cdllLoadLibrary(osgetcwd() + '/libtestso')
>>> print libtestmultiply(2, 2)4
注意:上面的Python脚本中需要把动态链接库放到当前目录中。
以上就是关于如何查看 python import 文件位置全部的内容,包括:如何查看 python import 文件位置、请教ctypes如何实现传入结构体数组指针的参数、python 字典调用C++函数等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)