用于直接将C DLL中存在的结构提取到python脚本的工具或自动生成ctypes结构的工具?

时间:2016-07-29 11:28:56

标签: python c windows dll

以下是我在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环境中实现。

0 个答案:

没有答案