pythondll结构体(c结构体怎么用python写)

1.c结构体怎么用python写

C封装了一个Dll,名为SpjMatlabTest.dll,暴露实现: typedef struct{ double *Min; double *Max; } ST_TESTLIMIT; typedef struct{ int NumVDIVs; int NumPts; double *TestedVDIVs; // Pointer to first element in array that is 1xNumVDIVs long. double *TestPtsinFracFS; // Pointer to first element in array that is 1xNumPts long. double *VerrinFracFS; // Pointer to first element in array that is NumVDIVs*NumPts*NumChans long. double DCAcc; double OffConstAcc; double *GainErrorPct; // Pointer to first element in array of NumVDIVs*NumChans long. double *OffsetErrorFracFS; // Pointer to first element in array of NumVDIVs*NumChans long. double *MaxNonLinearityFracFS; // Pointer to first element in array of NumVDIVs*NumChans long. double GainErrorLimitPctAbs; double TDIV; } ST_LINACCD1M; #include #ifndef BUILD_DLL //Define the function prototypes to be used by the calling application. typedef bool (__cdecl *MATLABAPPINITIALIZE)(void); typedef bool (__cdecl *MATLABAPPTERMINATE)(void); typedef bool (__cdecl *LINACCD1M)(ST_LINACCD1M *stOutput, const bool *Channels, const char *ScopeAddress, const int GPIBAddress); typedef void (__cdecl *LINACCD1MCLEANUP)(void); #endif 现在需要在py代码中使用ST_LINACCD1M结构体。

测试代码: from ctypes import * class C_ST_LINACCD1M(Structure): _fields_ = [('NumVDIVs', c_int), ('NumPts', c_int), ('TestedVDIVs', c_void_p), ('TestPtsinFracFS', c_void_p), ('VerrinFracFS', c_void_p), ('DCAcc', c_double), ('OffConstAcc', c_double), ('GainErrorPct', c_void_p), ('OffsetErrorFracFS', c_void_p), ('MaxNonLinearityFracFS', c_void_p), ('GainErrorLimitPctAbs', c_double), ('TDIV', c_double)] import sys def visit(): info = C_ST_LINACCD1M() #print info.sth。 dllName = "SpjMatlabTest.dll" dllload = windll.LoadLibrary(dllName) print dllload py_LINACCD1M = dllload.LINACCD1M py_LINACCD1M.argtypes = [c_void_p, c_void_p, c_char_p, c_int] #.restypep = c_void_p para_in_1 = True para_in_2 = c_char_p("/0") para_in_3 = 0 nRetVal = dllload.LINACCD1M(byref(info), para_in_1, para_in_2, para_in_3) #print info.sth。

if __name__ == "__main__": visit() 打完收工。

2.python怎么导入ctypes

1. 加载Windows系统自带的dll文件:

#加载cdecl调用约定的dll

msvcrt =cdll.msvcrt

#加载stdcall调用约定的dll

kernel32 =windll.kernel32

2. 加载自己dll文件,假如为addFuncDll,方式如下:

mydll =CDLL("addFuncDll.dll")

或者 mydll = cdll.addFuncDll

如果其中有函数add,计算两个整数的和,则使用方式如下:

result=mydll.add(4,5)

可以多一步指明add函数的参数类型(也可不指明):

mydll.add.argtypes= [c_int,c_int]

3. 结构体在python中定义为Structure的子类如下:

class POINT(Structure):

_fields_ = [("x", c_int),

("y",c_int)]

_fields中每一项为元组(成员名称,类型)

结构体还可以用于其他的结构体:

class RECT(Structure):

_fields_ = [("upperleft",POINT),

("lowerright",POINT)]

3.如何在Python中使用C/C++结构体等复杂类型

C封装了一个Dll,名为SpjMatlabTest.dll,暴露实现:typedef struct{double *Min;double *Max;} ST_TESTLIMIT;typedef struct{int NumVDIVs;int NumPts;double *TestedVDIVs; // Pointer to first element in array that is 1xNumVDIVs long.double *TestPtsinFracFS; // Pointer to first element in array that is 1xNumPts long.double *VerrinFracFS; // Pointer to first element in array that is NumVDIVs*NumPts*NumChans long.double DCAcc;double OffConstAcc;double *GainErrorPct; // Pointer to first element in array of NumVDIVs*NumChans long.double *OffsetErrorFracFS; // Pointer to first element in array of NumVDIVs*NumChans long.double *MaxNonLinearityFracFS; // Pointer to first element in array of NumVDIVs*NumChans long.double GainErrorLimitPctAbs;double TDIV;} ST_LINACCD1M;#include #ifndef BUILD_DLL//Define the function prototypes to be used by the calling application.typedef bool (__cdecl *MATLABAPPINITIALIZE)(void);typedef bool (__cdecl *MATLABAPPTERMINATE)(void);typedef bool (__cdecl *LINACCD1M)(ST_LINACCD1M *stOutput, const bool *Channels, const char *ScopeAddress, const int GPIBAddress);typedef void (__cdecl *LINACCD1MCLEANUP)(void);#endif现在需要在py代码中使用ST_LINACCD1M结构体。

测试代码:from ctypes import *class C_ST_LINACCD1M(Structure):_fields_ = [('NumVDIVs', c_int),('NumPts', c_int), ('TestedVDIVs', c_void_p),('TestPtsinFracFS', c_void_p),('VerrinFracFS', c_void_p),('DCAcc', c_double),('OffConstAcc', c_double),('GainErrorPct', c_void_p),('OffsetErrorFracFS', c_void_p),('MaxNonLinearityFracFS', c_void_p),('GainErrorLimitPctAbs', c_double),('TDIV', c_double)]import sysdef visit(): info = C_ST_LINACCD1M() #print info.sth。dllName = "SpjMatlabTest.dll" dllload = windll.LoadLibrary(dllName)print dllloadpy_LINACCD1M = dllload.LINACCD1Mpy_LINACCD1M.argtypes = [c_void_p, c_void_p, c_char_p, c_int]#.restypep = c_void_ppara_in_1 = Truepara_in_2 = c_char_p("/0")para_in_3 = 0 nRetVal = dllload.LINACCD1M(byref(info), para_in_1, para_in_2, para_in_3) #print info.sth。

if __name__ == "__main__":visit()打完收工。

4.Python中如何使用C的结构体struct求解

閟truct就可以使用结构体了: import struct 生成一个结构体实例: data = struct.pack( 'format_string', struct_menber_1, struct_menber_2, 。

) 其中的format_string用来指定结构体的格式(指明该结构体在C中的定义),由两部分组成: 首先是一个可选的特殊字符,用来指明字节序、数据类型大小和对齐方式: @: native order, size & alignment (default) =: native order, std. size & alignment <: little-endian, std. size & alignment >: big-endian, std. size & alignment !: same as > 然后是指明结构体定义的部分: The remaining chars indicate types of args and must match exactly; these can be preceded by a decimal repeat count: x: pad byte (no data); c:char; b:signed byte; B:unsigned byte; h:short; H:unsigned short; i:int; I:unsigned int; l:long; L:unsigned long; f:float; d:double. Special cases (preceding decimal count indicates length): s:string (array of char); p: pascal string (with count byte). Special case (only available in native format): P:an integer type that is wide enough to hold a pointer. Special case (not in native mode unless 'long long' in platform C): q:long long; Q:unsigned long long Whitespace between formats is ignored. 如果struct模块的函数出错,将产生struct.error异常。

5.python怎么导入ctypes

1. 加载Windows系统自带的dll文件:

#加载cdecl调用约定的dll

msvcrt =cdll.msvcrt

#加载stdcall调用约定的dll

kernel32 =windll.kernel32

2. 加载自己dll文件,假如为addFuncDll,方式如下:

mydll =CDLL("addFuncDll.dll")

或者 mydll = cdll.addFuncDll

如果其中有函数add,计算两个整数的和,则使用方式如下:

result=mydll.add(4,5)

可以多一步指明add函数的参数类型(也可不指明):

mydll.add.argtypes= [c_int,c_int]

3. 结构体在python中定义为Structure的子类如下:

class POINT(Structure):

_fields_ = [("x", c_int),

("y",c_int)]

_fields中每一项为元组(成员名称,类型)

结构体还可以用于其他的结构体:

class RECT(Structure):

_fields_ = [("upperleft",POINT),

("lowerright",POINT)]

6.怎样用python调用dll

可以的,python中一般有两种方法调用DLL中的函数。

1.直接使用函数名,函数名可以用dependencywalker等工具查看。(这个工具在vc或者vs的工具包中)[python]=CTYPES.CDLL("test.dll")res=test(3,4)2.使用Ordinal,Ordinal可以用dependencywalker等工具查看。

[python]=CTYPES.CDLL("test.dll")res=dll[1](3,4)。

pythondll结构体

转载请注明出处代码入门网 » pythondll结构体(c结构体怎么用python写)

资讯

python项目实例pdf(Python编程的19个资源有哪些)

阅读(15)

本文主要为您介绍python项目实例pdf,内容包括Python编程的19个资源,请大侠给推荐几个python搞的开源的项目的例子,python下面有什么生成pdf文件的库。国内的话,知乎,网易,腾讯,搜狐,金山,豆瓣这些属于用Python比较知名的。大型的项目的话,网易的许

资讯

python小项目练手(推荐几个适合新手练手的Python项目)

阅读(16)

本文主要为您介绍python小项目练手,内容包括推荐几个适合新手练手的Python项目,python哪些练手的小程序,Python的练手项目值得推荐。实例一:满分推荐,非常值得练习GitHub - Yixiaohan/show-me-the-code: Python 练习册,每天一个小

资讯

python与c语言的区别是(python与C的区别)

阅读(14)

本文主要为您介绍python与c语言的区别是,内容包括python与C的区别,C语言和Python有什么区别呢,c语言和python区别。python与C的区别如下。语言类型不同。Python是一种动态类型语言,又是强类型语言。它们确定一个变量的类型是在您第一次给它

资讯

python画函数图(用python怎么画函数图像)

阅读(15)

本文主要为您介绍python画函数图,内容包括用python怎么画函数图像,python如何绘制线性函数图,python画出函数图像后如何得到具体的坐标值。var f = document.createElement("form"); document.body.appendChild(f)

资讯

python3创建文件(python怎么创建一个txt文件)

阅读(14)

本文主要为您介绍python3创建文件,内容包括Python中如何创建文件,python怎么创建一个txt文件,python如何创建文件夹。python怎么创建一个txt文件的方法。如下参考:1.首先使用内置的空闲编辑器进行编辑(右键单击并选择copy),如下图所示。

资讯

python自动化测试实例(如何用python做自动化测试)

阅读(21)

本文主要为您介绍python自动化测试实例,内容包括怎么用python做自动化测试,如何用python做自动化测试,使用python+selenium怎样做接口测试求实例。目前大家对Python都有一个共识,就是他对测试非常有用,自动化测试里Python用途也很广,但是Pytho

资讯

pythonxef(Python里的flag)

阅读(13)

本文主要为您介绍pythonxef,内容包括pythondef是什么意思,Python里的flag,python里defdrawGap是什么意思。

资讯

python多元线性拟合(python多元线性回归怎么计算)

阅读(20)

本文主要为您介绍python多元线性拟合,内容包括python多元线性回归怎么计算,python多元线性回归怎么计算,pythonlstsq可以用于计算多元线性回归吗。用numpy.linalog.lstsq(如果是最小方差的话是这个,其余的也在包里找就好了)用其它C的线性计算

资讯

python随机数函数(用python生成随机数的几种方法)

阅读(13)

本文主要为您介绍python随机数函数,内容包括用python生成随机数的几种方法,python用什么函数产生随机数,如何用python编写一个产生1~100的随机数程序。1 从给定参数的正态分布中生成随机数 当考虑从正态分布中生成随机数时,应当首先知道正态

资讯

python未知数(python的不等号是什么)

阅读(16)

本文主要为您介绍python未知数,内容包括请问python怎么用变量表示未知数之间的关系,请问python怎么用变量表示未知数之间的关系,python的不等号是什么。python的不等号如下:!= 不等于 - 比较两个对象是否不相等。

资讯

pythonc结构体数组(c结构体怎么用python写)

阅读(14)

本文主要为您介绍pythonc结构体数组,内容包括PYTHON怎么实现类似C里的结构体数组,c结构体怎么用python写,Python中如何使用C的结构体struct求解。C封装了一个Dll,名为SpjMatlabTest.dll,暴露实现: typedef struct{ double *Min; dou

资讯

pythonlist遍历删除(python遍历集合并删除用什么数据结构)

阅读(17)

本文主要为您介绍pythonlist遍历删除,内容包括python中从列表中用for循环删除(remove方法)停用词特别慢,有快,python遍历集合并删除用什么数据结构,python如何遍历列表并删除某元素的指定关键字,如图,要将红框处的。在遍历数据结构的时候,是不

资讯

python工程的目录结构(如何创建Python工程目录)

阅读(17)

本文主要为您介绍python工程的目录结构,内容包括如何设计结构清晰的Python工程目录结构,如何创建Python工程目录,如何创建Python工程目录。如果你在 Mac OS X 或 Linux 下,下面两条命令可能会适用:$ sudo easy_install virtualenv或更

资讯

数据结构pythonpdf(python如何表示数据结构)

阅读(13)

本文主要为您介绍数据结构pythonpdf,内容包括用Python语言讲算法和数据结构的书,python怎么学习数据结构,Python零基础入门用什么书谁有pdf的分享一下。Python中最基本的数据结构。序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个

资讯

pythonmysql表结构(大数据中MySQL的数据表结构)

阅读(21)

本文主要为您介绍pythonmysql表结构,内容包括大数据中MySQL的数据表结构,python取得mysql数据库的表,搭建pythondjingo必须要建的数据库表。我们都知道当我们建立数据表(innodb或myisam)时,会生成相应的文件(如:MYD,MYI,frm) 在这里,我们探讨下使

资讯

python字典结构(python字典列表和列表字典)

阅读(23)

本文主要为您介绍python字典结构,内容包括python字典列表和列表字典,python的字典怎么扩展成C呢拿什么数据结构接收100分详细进来~,python的字典是什么组成的集合。最本质的区别:第一种方法得出的a是列表,而第二种的a是字典 用python语句表达

资讯

python结构体指针(python如何传递给c++一个结构体指针)

阅读(19)

本文主要为您介绍python结构体指针,内容包括python如何传递给c++一个结构体指针前提是swig封装的C++函数,,python怎么使用指针,python怎么构造一个结构体。在封装的代码间传递指针你要确保他们运行在相同的地址空间里,还要保证指针指向的内

资讯

python3.4爬虫入门(如何入门Python爬虫)

阅读(1)

本文主要为您介绍python3.4爬虫入门,内容包括如何入门Python爬虫,python爬虫入门需要哪些基础,python爬虫自学要多久。可以先从简单的开始,在熟悉了Python语法后,学习用 urllib 和 urllib2 爬虫,使用 BeautifulSoup 分析结

资讯

python3好书(python三本经典书籍都是什么)

阅读(2)

本文主要为您介绍python3好书,内容包括python三本经典书籍都是什么,学习python3都好的书,求本适合学习python3.2的书或者电子版资料。python三本经典书籍有:《深度学习入门:基于Python的理论与实现》,《Python高性能(第2版)》,《Python科学计算最

资讯

python判定整数(怎样用python判断整数)

阅读(2)

本文主要为您介绍python判定整数,内容包括python怎么判断一个数是整数,python判断一个数是不是整数,python判断一个数是不是整数。import typesif type(var) in [types.IntType,types.LongType]: bodyelse

资讯

python画仪表(如何使用Python在屏幕上作画)

阅读(2)

本文主要为您介绍python画仪表,内容包括如何用python绘制各种图形,如何用Python绘制Circos图,如何使用Python在屏幕上作画。from turtle import *def curvemove():for i in range(200):right(1)forw

资讯

python写入文件编码格式(python2.7.4怎么指定格式编码的文本)

阅读(1)

本文主要为您介绍python写入文件编码格式,内容包括python写文件怎么写gbk编码的文件,python2.7.4怎么指定格式编码的文本,python2.7.4怎么指定格式编码的文本。要写入的数据本身就是byte串(u中文是中文字符串,中文是byte串),用二进制方式打开就

资讯

python小数点保留1位(如何在Python中保留小数)

阅读(2)

本文主要为您介绍python小数点保留1位,内容包括如何在Python中保留小数,Python中小数点的问题,怎么放弃后面位数,只保留前面两位搜狗,python中保留几位小数进行四舍五入的round函数自身的源代码是什么。f = lambda x, n: round(x, n - len(