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

Python ctypes模块:扩展指针数组时进行NULL指针访问【代码】

我试图在项目中使用ctypes模块.我正在创建一个动态分配的“ max_entries”对数组,一旦该数组用完,我将创建一个新的大小为(1.5 * max_entries)的数组,并将内容从旧数组复制到新数组. 不幸的是,当我尝试访问此new_array的内容时,出现了“空指针访问”异常.相应的C代码似乎可以正常工作. (请参见下面的代码.) 我想知道我是否缺少有关ctypes模块工作方式的信息.任何帮助将不胜感激. (不确定这是否是适合我的问题的邮件列表.) /谢谢!#!...

python gdb和ctypes【代码】

我正在尝试实现调试助手,该助手将对xml节点进行字符串化.我正在使用gdb 7.2s python接口执行此操作.这个想法是获取节点地址,然后使用ctypes将其传递到xml库. 我已经设法获取xml节点地址(一个gdb.Value),并且可以在xml库中调用函数.但是不知何故,目的并没有实现.// prototype of functions to call int xmlNodeDump (xmlBufferPtr buf, xmlDocPtr doc, xmlNodePtr cur, int level, int format); xmlBufferPtr xmlBufferCreate(void)...

在Python中使用ctypes.util.find_library获取库的完整路径【代码】

在Python中,可以使用ctypes.util.find_library以类似于编译器的方式来定位库.在Mac OSX中,该函数返回完整路径名.但是在Linux中,仅返回文件名. (这里是docs) 有没有办法在Linux中也获得fullpath?解决方法:您可以加载库,并使用dl_iterate_phdr遍历加载的库:#!python from ctypes import * from ctypes.util import find_library# this struct will be passed as a ponter, # so we don't have to worry about the right layout cla...

我是否正确使用ctypes对这个结构进行了python化?【代码】

我正在尝试使用python的ctypes与this DLL进行通信.许多函数采用或返回HGRABBER类型:typedef struct HGRABBER_t__ { int unused; } HGRABBER_t; #define HGRABBER HGRABBER_t* (完整的头文件可以查看here).这是一个返回HGRABBER类型的函数原型的示例:HGRABBER __stdcall IC_CreateGrabber();这是我尝试在python中实现此结构,并使用它从DLL调用该函数的尝试:import ctypes as C class GrabberHandle(C.Structure):_fields_ = [('u...

python-指向c_int与c_ints数组的ctypes指针【代码】

我正在尝试在dll中调用函数.该函数称为pop(),它带有两个参数,一个int和一个指向int的指针.第一个参数是从第二个参数开始的数组的长度.此函数应返回一个指向int的指针,该int是n-1个元素数组中的第一个元素,其中n是原始数组中元素的数量.返回的数组应该是原始数组,没有第0个元素. 我的代码:from ctypes import cdll, c_int, POINTERlib = cdll.LoadLibrary('extlib.dll')lib.pop.restype = POINTER(c_int) #lib.pop.restype = c_int...

python ctypes,通过引用传递双指针【代码】

问题 我正在尝试使用具有以下原型的c库中的函数:int glip_get_backends(const char *** name,size_t * count);这里的名称参数是问题所在.它是通过引用传递的2维char型数组.在C中,该函数的用法如下:const char** name; size_t count; glip_get_backends(&name, &count); for (size_t i = 0; i < count; i++) {printf("- %s\n", name[i]); }现在我想使用ctypes从python使用此功能. 我尝试过的 对我来说,最合乎逻辑的方法是在python...

python-解码ctypes结构【代码】

我试图让我了解python中的ctypes,并且能够使一些简单的事情起作用,但是当涉及到解压缩c结构时,我发现自己遇到了一些困难.我决定要学习这一点,应该花一点时间,虽然我知道套接字标准库实现了gethostbyname_ex(),但我想我会尝试使用ctypes和libc.gethostbyname()来实现它. 我能够很容易地执行libc.gethostbyname():#!/usr/bin/env python from ctypes import *cdll.LoadLibrary('libc.so.6') libc = CDLL('libc.so.6') he = libc.get...

在Python中获取ctypes结构的二进制表示形式【代码】

我想编码一条消息…这是我生成的消息from ctypes import memmove, addressof, Structure, c_uint16,c_boolclass AC(Structure):_fields_ = [("UARFCN", c_uint16),("ValidUARFCN", c_bool ),("PassiveActivationTime", c_uint16) ]def __init__(self , UARFCN ,ValidUARFCN , PassiveActivationTime):self.UARFCN = UARFCNself.ValidUARFCN = Trueself.PassiveActivationTime = PassiveActi...

Ctypes Python <> Fortran DLL的访问冲突【代码】

我正在尝试使Python使用Fortran DLL(通过引用调用).运行Fortran 90代码时,它可以正常运行,但在Python中不起作用;它只会给出“访问冲突”错误或“没有足够的参数调用”. python代码:from ctypes import * mydll = cdll.LoadLibrary("test.dll")# This function works. print mydll.XIT() # prints 0mydll.GetInfo.argtypes = [POINTER(c_int),POINTER(c_int),POINTER(c_int),POINTER(c_int),POINTER(c_int),POINTER(c_int),POINTE...

使用ctypes从Python调用fortran函数【代码】

我希望使用ctypes调用一些由我的老板几年前编写的旧的fortran库.我遵循了this previous question中给出的示例,并且得到了预期的结果. 但是,当我修改代码时,为了稍微接近我所面对的情况,integer function addtwo(a, b)integer, intent(in) :: a, baddtwo = a + b end function变成real function addtwo(a, b)integer, intent(in) :: a, baddtwo = a + b end function也就是说,该函数现在是实数,而不是整数,返回的值始终为0.有人可以...

Python ctypes.string_at释放行为【代码】

我正在使用ctypes将某些C函数从DLL公开给Python脚本.其中一个函数返回一个动态调整大小的字符数组,我希望能够在Python中读取该数组的内容,而且还希望在完成处理后释放该数组的内存. 示例C代码:...#ifdef __cplusplus extern "C" { #endif__declspec(dllexport) char * WINAPI get_str(){int str_len = ... // figure out how long it is gonna be and set it herechar *ary = (char *)malloc(sizeof(char) * str_len);// populate...

Python ctypes中具有自定义类型的回调【代码】

我正在尝试使用ctypes在Python中包装一个C库.函数调用需要使用文档实现的回调函数.问题在于回调函数需要库中的自定义对象.这是我试图在python中复制的C代码void outputCallback(const A* a, void* b) {// }a = function1(0, 0, outputCallback, 0, 0)头文件中A的结构定义为:typedef struct A {const unsigned char* a1;unsigned int a2; } A;和我尝试的Python等效版本.class A(Structure):_fields_ = [("a1", ?, ?),("a2", c_int,...

如何自定义Python ctypes’c_wchar_p’和’c_char_p’重新类型?【代码】

在Python 3中function_name.restype = c_char_p # returns bytes我有很多这样的功能,每做一次我都需要做str(ret,’utf8′).如何创建一个custom_c_char_p来自动将其声明为这样?function_name.restype = custom_c_char_p # should return strC库还以c_wchar_p的形式输出UTF-16,它作为str到达python,但是当我做ret.encode(‘utf16’)时,我得到UnicodeDecodeError. 如何自定义c_wchar_p以确保Python知道它正在转换UTF-16以获得适当的s...

Python Ctypes:将返回的C数组转换为python列表,而没有numpy【代码】

我正在使用Python Ctypes访问某些C库. 我连接的函数之一返回const * double,它实际上是一个double数组. 当我在Python中获得结果时,如何将该数组转换为python列表? C函数的签名:const double *getWeights();假设它返回一个包含0.13和0.12的数组.我想获取一个Python列表:[0.13,0.12]解决方法:我成功使用指针解决了它 解决方案: 将函数返回类型定义为POINTER(double_c)(当然,数组实际上是C中的指针):getWeights_function_handler...

如何将ctypes指针强制转换为Python类的实例【代码】

假设您有以下C代码:typedef void (*PythonCallbackFunc)(void* userData);void cb(PythonCallbackFunc pcf, void* userData) {pcf(userData); }以及以下Python 3代码:import ctypesclass PythonClass():def foo():print("bar")CALLBACK_TYPE = ctypes.CFUNCTYPE(None, ctypes.c_void_p)def callback(userData):instanceOfPythonClass = ???(userData) # <-- this part right hereinstanceOfPythonClass.foo()lib = ctypes.cdll.L...

实例 - 相关标签