【python使用ctypes调用扩展模块的实例方法】教程文章相关的互联网学习教程文章

使用RaspberryPi的Python Ctypes【代码】

我正在PySodium编写一个ctypes包装器,用于libsodium例程crypto_aead_chacha20poly1305_encrypt,例程定义为:def crypto_aead_chacha20poly1305_encrypt(message,ad,nonce,key):mlen = ctypes.c_ulonglong(len(message))adlen = ctypes.c_ulonglong(len(ad))c = ctypes.create_string_buffer(mlen.value+16L)clen = ctypes.c_ulonglong(0)sodium.crypto_aead_chacha20poly1305_encrypt(c,clen,message,mlen,ad,adlen,None,non...

python – 如何将BitString转换为ctypes字节数组?【代码】

我刚刚开始使用BitString和ctypes,并且我将一部分二进制文件存储在startdata中,这是一个BitArray类.> print(startdata) 0x0000000109f0000000010605ffff现在,我必须按原样将这些数据传递给一个以无符号char *作为参数的C函数,所以我首先尝试做类似这样的事情:buf = (c_ubyte * len(startdata))()最后这样做:buf_ptr = cast(pointer(buf), POINTER(c_ubyte))这有效,但是如何将startdata中的字节数据分配给刚刚创建的数组/缓冲区?...

python – ctypes如何知道何时抛出ArgumentError,但有时只是?【代码】

我正在尝试使用ctypes,我发现了令我困惑的东西.我有一个导出此函数的.so文件:void hello(int a) {printf("hello, a=%d", a); }我用Python调用它,但是我输入了一个错误类型的参数来看看会发生什么:mydll = ctypes.CDLL("libhello.so") mydll.hello('this is string')这不会抛出错误,只打印hello,a = -1219868708.但是如果我传递一个double而不是mydll.hello(1.0),那么它会抛出一个异常:ctypes.ArgumentError: argument 1: : Dont...

python – 使用ctypes突变整数数组【代码】

目前我正在将我的python代码中的性能瓶颈转移到c,以研究性能影响.此代码将运行模拟,并通过ctypes将结果报告给python.但是,我在让我的类型正确匹配时遇到问题. 虽然我正在寻求解决这个特殊问题,但我也在寻找有关使用ctypes的更一般的建议,因为文档和程序看起来有点薄. 我有以下c函数:extern "C" {void f( int* array, int arraylen ) {for(int i = 0; i < arraylen; i++) {array[i] = g() // mutate the value array[i];}} }以下是...

Python ctypes和动态链接【代码】

我在C中编写了一些库,其中包含我想通过ctypes从Python调用的函数. 我已经成功完成了另一个库,但该库只有非常类似的依赖(即fstream,math,malloc,stdio,stdlib).我正在处理的另一个库有更复杂的依赖项. 例如,我将尝试使用fftw3.作为测试,我将尝试编译一个包含以下内容的简单.cpp文件:int foo() {void *p = fftw_malloc( sizeof(fftw_complex)*64 );fftw_free(p);printf("foo called.\n");return 0; } 我编译为:icpc -Wall ...

使用Pythons ctypes从libc调用uname【代码】

TL;博士 这适用于GNU版本的libc(尚未尝试使用uclibc)from ctypes import *libc = CDLL('libc.so.6')class uts_struct(Structure):_fields_ = [ ('sysname', c_char * 65),('nodename', c_char * 65),('release', c_char * 65),('version', c_char * 65),('machine', c_char * 65),('domain', c_char * 65) ]gnar = uts_struct()libc.uname(byref(gnar))print gnar.nodename原帖 以下代码段错误;我不确定我做错了什么.from ctypes i...

Python ctypes in_dll字符串赋值【代码】

我可以使用一些帮助使用ctypes分配DLL中的全局C变量. 以下是我正在尝试的一个例子: test.c包含以下内容#include <stdio.h>char name[60];void test(void) {printf("Name is %s\n", name);}在Windows(cygwin)上我构建了一个DLL(Test.dll),如下所示:gcc -g -c -Wall test.c gcc -Wall -mrtd -mno-cygwin -shared -W1,--add-stdcall-alias -o Test.dll test.o当尝试修改名称变量然后使用ctypes接口调用C测试函数时,我得到以下内容…...

Python ctypes – dll函数接受结构崩溃【代码】

我必须访问ms windows xp下的POS终端.我正在使用python 2.7.我负载的DLL中的关键功能是支付接受两个结构指针,但它崩溃返回1(通信错误)但没有进一步的消息.请注意,调用支付函数时,并非POSData结构的所有元素都会收到值.我尝试的其他功能(GetVersion)确实有效.这里的规格和我的代码:typedef struct {char IPAddress[16]; //xxx.xxx.xxx.xxxint Port; } TETHParameters; typedef struct {char TerminalId[8+1];char AcquirerId[11...

调用ctypes函数时,Python int溢出【代码】

我正在玩ctypes …我有以下C代码 编辑:我试图解决这个问题的原因是让this blog post更正确 sumrange.c#include <stdio.h>long sumrange(long);long sumrange(long arg) {long i, x;x = 0L;for (i = 0L; i < arg; i++) {x = x + i;}return x; }我使用以下命令编译(在OSX上)$gcc -shared -Wl,-install_name,sumrange.so -o ./sumrange.so -fPIC ./sumrange.c我在python中实现了相同的功能:pysumrange = lambda arg: sum(xrange(arg...

使用Python Ctypes将struct指针传递给DLL函数【代码】

我试图使用Python ctypes访问DLL文件中的函数.提供的功能描述如下.Prototype: Picam_ConnectDemoCamera( PicamModel model,const pichar* serial_number,PicamCameraID* id )Description: Virtually connects the software-simulated 'model' with 'serial_number' and returns the camera id in `_id_` Notes: `_id_` is optional and can be null该函数引用DLL中定义的一些变量类型.接下来描述这些变量PicamModel Type: enum Des...

python – 使用ctypes windll卸载64位dll时出错【代码】

我发现这里有几篇关于使用ctypes卸载dll的帖子,我完全按照说法工作的方式来自ctypes进口*file = CDLL('file.dll')# do some stuff herehandle = file._handle # obtain the DLL handlewindll.kernel32.FreeLibrary(handle)但是,我在python 64位,我的DLL也编译为x64,我从上面的最后一行得到一个错误说:argument 1: <class 'OverflowError'>: int too long to convert我检查句柄是’8791681138688’的长int(int64),那么这是否意味着...

Python ctypes – 在Structure .value中访问数据字符串失败【代码】

我能够得到一个结构作为dll函数的结果填充(因为它似乎使用x = buffer(MyData)然后repr(str(buffer(x)))来查看它. 但是如果我尝试使用.value访问Structure的元素,则会引发错误. 我有一个VarDefs.h需要这样的结构:typedef struct {char Var1[8+1];char Var2[11+1];char Var3[3+1]; ... }TMyData应该传递给这样的函数:__declspec(dllexport) int AFunction(TOtherData *OtherData, TMyData *MyData);在Python中,我现在能够以这种方式...

python – 使用ctypes数组时PIL的Image.frombuffer预期数据长度【代码】

我正在使用Python,PIL和ctypes来进行图像处理.当我把东西混在一起时,我使用PIL的fromstring函数将像素缓冲区从ctypes转换为PIL对象.我只是迭代数组,构建python字符串. 这有效tx = foo.tx tx.restype = POINTER(c_ubyte) result = tx(...args...)#TODO there must also be a better way to do this pystr = "" for i in xrange(w*h*4):pystr += result[i] i = Image.fromstring("RGBA", (w, h), pystr) i.save("out.png")它不漂亮,但...

在python中使用ctypes调用的函数的正确回调签名是什么?【代码】

我必须在Python中定义一个回调函数,一个将从DLL调用的函数.BOOL setCallback (LONG nPort, void ( _stdcall *pFileRefDone) (DWORD nPort, DWORD nUser), DWORD nUser);我尝试了这个代码,它似乎在Python 2.5中工作,但是使用Python 2.7它会崩溃,我认为我做错了.import ctypes, ctypes.wintypes from ctypes.wintypes import DWORDdef cbFunc(port, user_data):print "Hurrah!"CB_Func = ctypes.WINFUNCTYPE(None, DWORD, DWORD)mydl...

将Python ctypes.Structure转换为str【代码】

我有一个结构(在这种情况下是一个Netlink消息头)我需要通过套接字发送到内核.我弄清楚的唯一方法是使用__reduce __().>>> class nlmsghdr(ctypes.Structure): ... _fields_ = [('nlmsg_len', ctypes.c_int32), ... ('nlmsg_type', ctypes.c_int16), ... ('nlmsg_flags', ctypes.c_int16), ... ('nlmsg_seq', ctypes.c_int32), ... ('nlmsg_pid', ctypes.c_in...

实例 - 相关标签