以下是我在C dll中定义的结构:
//structure.h
#include<stdio.h>
typedef struct Point
{
double x, y;
} Point;
.c文件如下:
//structure.c
#include<stdio.h>
#include "structure.h"
#include <math.h>
/* Function to calculate hypotenuse of a triangle */
__declspec(dllexport) double distance(Point *p1, Point *p2)
{
return hypot(p1->x - p2->x, p1->y - p2->y);
}
在python中使用ctypes,我编写了一个脚本,可以访问C DLL:
//structure.py
import ctypes as C
from ctypes import *
class Point(C.Structure):
_fields_ = [('x', C.c_double),
('y', C.c_double)]
mydll=C.cdll.LoadLibrary('structure.dll')
distance=mydll.distance
distance.argtypes=(C.POINTER(Point),C.POINTER(Point))
distance.restype=C.c_double
p1=Point(1,2)
p2=Point(4,5)
print(mydll.distance(p1,p2))
由于这只是一个非常小的结构,变量非常少,因此很容易将python脚本与C文件一起编写。
但是如果一个项目具有1000个结构并且其中包含无数个变量,那么有没有一种方法可以减少在ctypes中编写结构的重复工作?
或者Python中是否有一些工具可以直接将C头文件转换为Python结构?还有一些python模块或工具可以将C结构直接转换为ctypes结构吗?
P.S.-我希望所有这些都在Windows环境中实现。