草庐IT

ctype_alpha

全部标签

python - 在 C 中为函数指针回调函数编写 Python ctypes

我正在尝试编写python代码来调用dll函数并卡在下面的函数中,我认为这与typedef回调函数或函数指针有关。我已经测试了下面的代码,当调用回调函数时,python崩溃(窗口通知——python.exe已停止响应),没有调试消息。我很困惑,任何帮助将不胜感激:)谢谢!C:#ifdefO_Win32/**@cond*/#ifdefP_EXPORTS#defineAPI__declspec(dllexport)#else#defineAPI__declspec(dllimport)#endif//#ifdefP_EXPORTS/**@endcond*/#endif//#ifdefO_W

Python ctypes 和函数调用

我的friend制作了一个可在x86上运行的小型概念验证汇编器。我决定也为x86_64移植它,但我立即遇到了问题。我用C写了一小段程序,然后编译并objdump代码。之后我将它插入到我的python脚本中,因此x86_64代码是正确的:fromctypesimportcast,CFUNCTYPE,c_char_p,c_longbuffer=''.join(map(chr,[#0000000000000000:0x55,#push%rbp0x48,0x89,0xe5,#mov%rsp,%rbp0x48,0x89,0x7d,0xf8,#mov%rdi,-0x8(%rbp)0x48,0x8b

python - 使用 ctypes 处理 128 位整数

使用Pythonctypes支持128位整数(当前为__uint128_t)的最佳方法是什么?也许是两个uint64_t的用户定义结构,但这会在需要时产生对齐问题。关于为什么ctypes没有扩展到支持128位整数有什么想法吗? 最佳答案 如果您真的想使用128位整数,那么您无需担心对齐问题。当前的体系结构和运行Python的机器均不支持128位native整数运算。因此,没有机器需要或受益于128位整数16字节对齐。只需使用该用户定义的结构就可以了。如果您真正要求的是支持128位vector类型,那么您可能需要将它们对齐。也就是说,

Python ctypes : How to modify an existing char* array

我正在开发一个使用C库libupnp的Python应用程序。我正在使用CTypes来使用足够简单的库。我遇到的问题是当我为读取请求注册回调函数时。该函数具有以下形式的原型(prototype):intread_callback(void*pFileHandle,char*pBuf,longnBufLength);pFileHandle只是一些文件句柄类型。pBuf是一个可写内存缓冲区。这是数据输出的地方。nBufLength是要从文件中读取的字节数。返回一个状态码。我有一个Python函数指针。这很容易实现,但是当我定义一个Python函数来处理这个回调时,我发现pBuf没有被写入,因

python - ctypes 中的结构内联合语法

关于ctypes语法的快速问题,因为Unions的文档对于像我这样的初学者来说并不清楚。假设我想实现一个INPUT结构(参见here):typedefstructtagINPUT{DWORDtype;union{MOUSEINPUTmi;KEYBDINPUTki;HARDWAREINPUThi;};}INPUT,*PINPUT;我应该还是需要更改以下代码?classINPUTTYPE(Union):_fields_=[("mi",MOUSEINPUT),("ki",KEYBDINPUT),("hi",HARDWAREINPUT)]classINPUT(Structure):_field

python - 在 python 中使用 ctypes 方法会产生意外错误

我对python和ctypes还很陌生。我正在尝试完成一项看似简单的任务,但却得到了意想不到的结果。我正在尝试将字符串传递给c函数,因此我使用的是c_char_p类型,但它给了我一条错误消息。简而言之,这就是正在发生的事情:>>>fromctypesimport*>>>c_char_p("helloworld")Traceback(mostrecentcalllast):File"",line1,inTypeError:stringorintegeraddressexpectedinsteadofstrinstance这是怎么回事? 最佳答案

python - 获取 ctypes 指针指向的内存地址

简短版:如何获取ctypes指针指向的地址?长版:我已经将python函数注册为C库的回调。C库需要void(*p_func)(charstat,char*buf,shortbuf_len)的函数签名,因此我注册了一个适当的python函数。进入python函数后,想知道buf指向的内存地址。我该怎么做? 最佳答案 我已经通过阅读文档自行解决了这个问题。我想知道库分配的内存块的内存位置。我有指向所述block的ctypes指针。为了获取block的内存地址,我使用了ctypes.addressof(p_block.contents)

python - 在 Python 中将字符串转换为 ctypes.c_ubyte 数组的有效方法

我有一个20字节的字符串,我想将它转换为ctypes.c_ubyte数组以进行位域操作。importctypesstr_bytes='01234567890123456789'byte_arr=bytearray(str_bytes)raw_bytes=(ctypes.c_ubyte*20)(*(byte_arr))有没有办法为了转换而避免从str到bytearray的深拷贝?或者,是否可以在没有深拷贝的情况下将字符串转换为字节数组?(使用像memoryview这样的技术?)我正在使用Python2.7。性能结果:根据eryksun和BrianLarsen的建议,这里是vboxVM下使

python - 使用 python-ctypes 将 fortran 与 python 接口(interface)

经历:fortran大约3个月python-中级:在此之前从未在python中使用过ctypes模块我一直在寻找一种方法来使用fortran代码来完成我在python方面的博士工作——随后使用matplotlib进行可视化的动态计算。THISPOST帮助(这表明可以使用ctypes模块在python中使用/调用fortran代码-并且考虑到fortran函数具有绑定(bind)到它们的备用名称-这在逻辑上对我来说很有意义,尽管我不知道它是如何工作的细节。但我们确实明智地选择了我们的战斗!)。那么thisSOpost也处理从python调用fortran函数。下一个合乎逻辑的步骤是查找d

python ctype递归结构

我用C为驱动程序开发了一个DLL。我用C++编写了一个测试程序,DLL工作正常。现在我想使用Python与这个DLL进行交互。我已经成功地隐藏了大部分用户定义的C结构,但有一点我必须使用C结构。我是python的新手,所以我可能会出错。我的方法是使用ctype在python中重新定义一些结构,然后将变量传递给我的DLL。但是在这些类中,我有一个自定义链表,其中包含如下递归类型classEthercatDatagram(Structure):_fields_=[("header",EthercatDatagramHeader),("packet_data_length",c_int),(