python3使用ctypes有些c类型没有怎么办?

被实习作业折磨到摸不着头脑
菜狗一只,平常总是靠度娘解决问题,但这次真的搜不到了(╥╯^╰╥)
实在不想用C++......而且已经丢了很久了......
学校实习任务开发指纹仪的相关软件,调用dll函数。
问题1:
dll函数:HANDLE_stdcall sensorOpen(int index)

这个类型是句柄HANDLE,其返回值需要用到,但是Python没有直接HANDLE,我用int接收暂没出现问题,怕之后会遇到先问一个。

问题2:
dll函数:int_stdcall sensorCapture(HANDLE handle,unsigned char* imageBuffer, int imageBufferSize)//获取图像

handle就是上面那个,unsigned char* 文档解释是接收的图像即是输入的参数也会输出,后续指纹算法需要,ctypes也没有,怎么实现?
我目前使用imageBuffer = create_string_buffer(所需空间大小),但是没有采集到图像(我检验了该函数返回值,为0,即无图像)
我也试过了create_unicode_buffer,结果也一样。到底是使用方法问题还是其他导致我真的没采集到图像

问题3:(虽然前面的还没解决但先问下)(准确的说目前卡在这里)
dll函数:HANDLE stdcall BIOKEY_INIT(int License, WORD *isize, BYTE*Params, BYTE *Buffer, intImageFlag)
问题出在isize:文档描述:[in] 传入一个无符号双字节长度为22 的数组,且 isize[0]和isize[20]为传入图像宽度,isize[1]和 isize[21]为传入图像高度
这isize怎么提前定义?

我尝试使用isize = bytearray()处理,但是毕竟是双字节,光是宽度就有300多,但byte要在0-255之间,而且还不确定都是数字(我试过定义为整型数组,报错don't konw how to convert parameter 2)。作为指纹图像,虽然有函数可以修改采集图像的大小,但是太小了的话数据的完整性和可使用性就大打折扣。所以这个双字节咋整啊

问题4:
有些函数传入参数为int*,咋整......我先去看看ctypes的文档,但是我记得上次看的时候好像没有针对这种指针的...直接使用c_char_p吗?(目前没法验证这个方法是否可行,因为前面就走不通。。。)

总之目前就这些了,实习作业周三开始检查希望会的大佬帮帮我!谢谢啦!
我先滚去看文档了。。。

0

1个回答

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
python3和c/c++的混合编程(ctypes的使用)
python作为一种胶水语言具有较高的开发效率, 但是其运行效率比较低, 当计算量比较大时,显得力不从心.  而ctypes是python下的一个可以链接c/c++的一个库. 可以将C函数编译成动态链接库, 即window下的.dll文件或者是linux下的.so文件. 这样我们通过使用cytpes可以加速代码的运行速度.test = cdll.LoadLibrary("./caleach.so"...
python3利用ctypes传入一个字符串类型的列表
pyhon用ctypes向c语言里传入一个字符串类型的列表
关于python3调用C/C++的方法(ctypes)
转载请注明出处!     最近帮同事做一个历史数据的转换合并软件,使用python3从数据库读出数据,然后根据其中的几个字段相同的归类合并一行,然后输出到EXCEL中,数据大概是5W行,考虑到归类合并逻辑比较复杂,用python效率比较低,这部分用c/c++完成,python3调用生成的dll.运行截图  代码如下:python3代码如下:# -*- coding: utf-8 -*-'''Cre
Windows下通过Python 3.x的ctypes调用C接口
        在Python中可以通过ctypes来调用动态库中的C接口,具体操作过程如下:        1. 使用vs2013创建一个加、减、乘、除的动态库,并对外提供C接口,code内容如下:        math_operations.hpp:#ifndef TEST_DLL_1_MATH_OPERATIONS_HPP_n#define TEST_DLL_1_MATH_OPERATIO...
Python2 & Python3 ctypes 字符串编码类型转换大坑
ctypes介绍nnpython标准库自带的模块,支持调用C的动态链接库文件(windows下为*.dll,linux下为*.so) n示例代码:nn# 加载动态链接库文件nll = cdll.LoadLibrarynlib = ll("lib/libTest.so")n# 生成函数指针n# 假设库中有函数int foo(char*)nfoo = lib.foon# 设置参数格式nfoo.argt...
Python ctypes模块加载C/C++ 动态库
折腾了很久,网上也少有找到关于参数引用的方法。nn以下,为方便其他人参考 对主要问题的解决方式作以记录。nn1. 参数传入和传出nn如test.so中有如下接口:nnnint DLLAPI_ChangeValue(int *value,char *cstr);nnnn接口实现:nnnnint DLLAPI_ChangeValue(int *value,char *cstr)n{n    value...
python ctypes库3_如何传递并返回一个数组
可以将数组指针传递给dll,但无法返回数组指针,python中没有对应的数组指针类型。如果需要返回数组,需借助结构体。参考ctypes官方文档:https://docs.python.org/3.6/library/ctypes.html#structures-and-unions返回一个结构体例程:# 返回结构体nimport ctypesnpath = r'E:\01_Lab\VisualSt...
python中运用ctypes库实现c风格变量的定义和调用
ctypes是Python的一个外部库,提供和C语言兼容的数据类型,可以很方便地调用C DLL中的函数。ctypes的官方文档在这里。1. ctypes基本数据类型映射表参数类型预先设定好,或者在调用函数时再把参数转成相应的c_***类型。ctypes的类型对应如下:ctypes typeC typePython Typec_charchar1-character stringc_wcharwch...
python使用ctypes与C混合编程
python作为胶水,可以非常方便地和其他语言进行混合编程,当然和C混合编程的方式也有很多种,如使用Cyptes、Cython、Boost、Swig等等。使用混合编程的好处在于可以理由各个语言优势,完成整个功能,如c语言的效率就明显高于python语言。Ctypes的方式,主要流程是将c源代码通过编译生成动态链接库dll或so文件,然后在python中使用ctypes动态链接库导入功能。调用方式示...
python 与 C 的交互(ctypes库使用)
python 与 C 的交互(ctypes库使用)nnn ctypes是Python的一个外部库,可以使用python语言调用已经编译好的C语言函数以及数据类型并进行数据交换等。ctypes的官方文档在https://docs.python.org/3/library/ctypes.htmlnnnnn1. ctypes基本数据类型映射表nnnnnn2. python调用c语言的函数库nn1.生成...
Python Ctypes 多级指针 传参数 和返回值
最近在搞神经网络框架这块,由于框架是用C++写的但是后续的操作不想再用C++写(主要C++写的头疼)所以准备将后面的工作转入python中写这里涉及到利用Python 和Ctypes 来实现python调用C++的接口。 由于用到很多数组我这里全都是标志着指针的如果是二维就是ndouble ** arry 三维就是 double *** arry所以肯定是要涉及到多级指针的传入和返回问题接下来
【转】当用 Python ctypes 模块调用动态链接库,如何传入一个结构体指针
rn转自http://www.dup2.org/node/150nrn当用 Python ctypes 模块调用动态链接库,如何传入一个结构体指针rn、rn由 qyb 于 星期五, 2006-04-07 07:40 发表rnrnrnn技术rnnrnrn最近用 dv2xvid 这个东东很多,上两周几乎每天都用它跑一个晚上压缩2个小时的视频。于是又萌发了把它改进得更通用的念头。rn目前 dv2xvid...
python使用ctypes调用C接口库
之前项目需要测试C接口函数,网上搜了下,python的ctypes模块还是挺好用的。现在有时间总结下1. 科普windows下调用C接口函数,一般是调用dll或lib库。dll是指动态链接库,lib是指静态库,一般来说调用动态库比较多。ctypes提供了三种调用动态库的对象:cdll、windll、oledll。其中cdll主要用来加载C语言调用方式(cdecl),windll主要用来加载WIN3...
python ctypes库4_如何传递一个字符串
关键点是理解char和char*char *ptr_2 = "ab";nn//等价于nnchar arr[2] = {'a','b'};nchar *ptr_1 = arr;传递一个字符串并返回该字符串//test stringnDLLEXPORT char* __stdcall test_str(char *str_ptr) n{ n return str_ptr; n}...
[python3 实用教程]使用ctypes模块调用运行c代码
[python3 实用教程]使用ctypes模块调用运行c代码nn创建c文件nndemo.c:n#include<stdio.h>nnlong my_app(long a){n long ret = 0;n n for(long i=0; i<a; i++){n ret += 2;n }n n return(ret);n}nnng...
python通过ctypes混合调用c/c++封装开源音频引擎libsoundio
其实python和c混合调用的方法很多,如swig、cpython等等,但这些都不是标准库,需要额外安装的,本文讲的是标准库的ctypes来调用c,实现强大的功能,没办法霸道C\C++就是那么强大,不服不行,有那种语言是无法调用C的,没有吧。nn本文既不是扫盲也不是hello,world之类的,期初我百度了python通过ctypes封装调用c,全是千万一律的,一段基础代码拷贝了无数次,所以这次搞...
ctypes与C类型
上面的是ctype类型,与标准c类型,python封装类型nnctypes的类型都是由python封装,即第三列,所以基本的组成只有string,bytes,int,float,boolnn各种构造nn首先构造函数接受任何真值表达式,这些类都有对应的默认可选参数,即默认初始值。nn因为ctypes中的类型是由python封装,所以还是遵循python语言的特性,那就是创建之后基本类型就不可变...
python ctypes调用C返回指针类型,64位值被转换成32位值
调用c函数前先指定返回类型nnnnlib.ctopy.restype = POINTER(c_ubyte)
Linux下 Python通过ctypes调用cAPI (一)
c_long和c_int是一种类型。cdll加载使用标准cdecl调用约定导出函数的库windll使用stdcall调用约定调用函数oledll也使用stdcall调用约定在linux下通过两种方法加载动态链接库:1.cdll.LoadLibrary("libc.so.6")2.CDLL("libc.so.6")(结果相同)如何告诉Python一个外来函数的形参类型和返回的值的类型呢?答:给函数的...
【python C结构体】Python Ctypes结构体指针处理(函数参数,函数返回)
n n n 一切以官网为准:https://docs.python.org/3.6/library/ctypes.htmln以下为参考:nn1、在python中调用C语言生成的动态库,返回结构体指针,并进行输出!nnnmylib.c(动态库源代码)nnnnnnn// 编译生成动态库: gcc -g -fPIC -shared -o libtest.so test.c  nnn  nnn...
ctypes——模块
ctypesnnnn声明——以下代码均在python3.6下测试执行的nnnn初识nnnnmsvcrt.printf只打印一个字符nnpython3.x中nnnnimport ctypesnmsvcrt = ctypes.cdll.msvcrtnmessage_string = 'Hello world!\n'nmsvcrt.printf('Testing:%s',%message_string)...
Python的学习---- ctypes库的使用整理
链接:https://blog.csdn.net/m0_37822019/article/details/79709617
python利用ctypes的指针传入int型列表和string类型列表到c语言中
下面这个方法是将c语言的函数编译为动态链接库,然后python调用得到结果。这个c语言中没有main函数,是因为python只需要调用它的方法。将它和c++结合,用c++操作这个python的list,就需要用到extern “C”了。。。后续会出~~如果有大神可以不用extern”C”直接调用c++的,请留言,感谢分享
最全ctypes用法总结
ctypes是Python的一个外部库,提供和C语言兼容的数据类型,可以很方便地调用DLL中输出的C接口函数。nn#### 1.加载dll和取出函数n```pythonnfrom ctypes import *   ndll = cdll.LoadLibrary(dllpath)   #dllpath是字符串ndll = windll.LoadLibrary(dllpath)n```n上面两行使用...
[Python]ctypes+struct实现类c的结构化数据串行处理
用C/C++实现的结构化数据处理在涉及到比较底层的通信协议开发过程中, 往往需要开发语言能够有效的表达和处理所定义的通信协议的数据结构. 在这方面是C/C++语言是具有天然优势的: 通过struct, union, 和bit-fields, C/C++能够以一种最有效率也最自然的方式处理此类问题.nn那么问题来了? 用Python如何达到这个目的呢?n...
Linux下 Python通过ctypes调用C API (二)
关于python与C混编的(数组类型)参数和返回值传递1.python向C中传递数组参数helloWorld.c#include<stdio.h>nvoid test(int input[])n{n printf("Hello World!\n");n int i=0;n for(i=0;i<2;i++){n printf("%d ",input[i]); n }n}main....
利用ctypes给python加速
好久没写博客了,来水一篇,今天写写怎么用ctypes给Python加速。最近在用pyspark,然而Python效率实在太低,只能用C加速了。先说说结果,加速后C运行速度比Python快1000倍,因为我们的程序有特别大的双层循环,还有位操作。用C的时候,我还用了一些memcpy, memset, memcmp等操作,所以加速非常明显。利用C语言给Python加速的方法特别多,可以用ctypes,
python ctypes库2_指定参数类型和返回类型
python函数的参数类型和返回类型默认为int。如果需要传递一个float值给dll,那么需要指定参数的类型。如果需要返回一个flaot值到python中,那么需要指定返回数据的类型。数据类型参考python文档:https://docs.python.org/3.6/library/ctypes.html#fundamental-data-typesimport ctypesnpath = r...
python :通过ctypes DLL操作向C传递二维数组-window vs2017环境
windows 代码:nextern “C”n{n//initArray.cn_declspec(dllexport) void initArr(int arr[][2],int row) {nfor (int i = 0; i < 2*row; i++)n{narr[i / 2][i % 2] = i;n}n}n}npython代码:nimport ctypesnrow = 8nbrr=(...
python3基础之枚举与闭包
一、枚举nn1.1 枚举的表示nnIn [31]:nnnfrom enum import Enumnnclass COLOUR(Enum):n YELLOW =1n GREEN =2n BLACK = 3n RED = 4nprint(COLOUR.YELLOW)nnnnCOLOUR.YELLOWnnn1.2 枚举的优势和特点(相比于字典)nn枚举不可变,枚举不允许相同的标...
python ctypes库5_如何传递一个字符串数组
直接上代码:struct struct_str_arrn{n char* str_ptr[1000];n};nnstruct_str_arr str_arr;nstruct_str_arr* str_arr_ptr = (struct_str_arr*)malloc(sizeof(str_arr));nnnDLLEXPORT struct_str_arr* __stdcall test_str_a...
C/C++ 生成的.so文件,python 用ctypes调用
注意:此生成的动态链接库必须cdll.LoadLibrary('/home/leo/test.so'),不能直接import testnn1. 新建一个源码文件,里面包含了返回两个整数的和的函数nn如果使用C语言,新建test.c文件,并输入以下内容:n// test.cn__declspec(dllexport) int sum(int a, int b) {n return a
python LInux下使用ctypes操作内存
nctypes创建的内存不能自动对齐,可以使用如下方法对齐内存:rn# _*_ coding:UTF-8rnrnimport sysrnimport timernimport osrnrnimport ctypesrnimport ctypes.utilrnrndef ctypes_alloc_aligned(size, alignment):rn buf_size = size + (al...
python调用C++(仅限函数),ctypes调用so文件注意事项
n单个.c文件生成.so:ncd /d D:\Program Files (x86)\MinGW\binngcc "D:\VisulStudio\gccSPA\gccSPA\SolarPosAngle.c" -fPIC -shared -o "D:\VisulStudio\gccSPA\gccSPA\gccSPA.so"npython中调用nfrom ctypes import *naimHand...
python中ctypes模块应用中文帮助文档
翻译者:butland,翻译于2010.1.2——2010.1.3,个人博客:[url]http://butlandblog.appspot.com/[/url]rnrn内容:rn.加载动态链接库rn.从已加载的dll中引用函数rn.调用函数1rn.基本的数据类型rn.调用函数2rn.用自己的数据类型调用函数rn.确认需要的参数类型(函数原型)rn.返回值rn.传递指针rn.结构和联合rn.结构或...
python3调用c函数接口的错误
python2的源码直接在python3.5运行(出错): net = dn.load_net("cfg/yolov3.cfg", "weights/yolov3.weights", 0) ctypes.ArgumentError: argument 1: : wrong type   使用类型转换(出错): net = dn.load_net(c_char_p("cfg/yolo.c
ctypes声明需要的参数,argtypes
可以指定dll导出的方法类型,你可以定义一个argtypes参数来指明。nn对于可变参数,最好不要用这种,因为也不适合。nnn'''ncnint add(int a,int b)n{n return a+b;n}n'''nnadd.argtypes = [c_int,c_int]nadd('112','1113')nn这里的add,就会严格的类型转换,所以这里字符串就是错的。nn声明具体类型...
python的CTypes模块调用C++程序的问题详细解决
gcc/g++问题nn在网上搜索了一些将c/c++转化为.so文件的gcc方法,但是尝试却失败,继续查找发现是c++代码要用g++ nnnnnc++中自建.h文件的处理nn过了第一关,接下来等着的是.h文件的处理,cd /usr/include发现全是.h的文件,首先必须将bg.cc中的.h部分单独建立.h函数并添加到cd /usr/include下,然后,g++ nnnnnfor语句的变量定义问...
python中ctypes使用:指针和指针数组的调用
1、案例一:指向float的指针nnc函数原型为:nnnTRESULT imagequality_brightnessException(TBITMAP* pImg,TFloat *fCast, TFloat *fDa)nnnnpython中调用时:nn入参定义为:nnninternalLibrary = CDLL(u'.../libimagequality.so') nIQ_Bright...
python中ctypes的使用
Python 和 C 的混合编程工具有很多,这里介绍 Python 标准库自带的 ctypes 模块的使用方法。 初识Python 的 ctypes 要使用 C 函数,需要先将 C 编译成动态链接库的形式,即 Windows 下的 .dll 文件,或者 Linux 下的 .so 文件。先来看一下 c...
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 python3的教程 python3学习