Articles of ctypes

Python的ctypes不加载在Mac OS X的dynamic库

我有一个C ++库repeater.so ,我可以在Linux中从Python加载以下方式: import numpy as np repeater = np.ctypeslib.load_library('librepeater.so', '.') 但是,当我在Mac OS X(Snow Leopard,32位)上编译相同的库并获得repeater.dylib ,然后在Python中运行以下代码: import numpy as np repeater = np.ctypeslib.load_library('librepeater.dylib', '.') 我得到以下错误: OSError: dlopen(/mydir/librepeater.dylib, 6): no suitable image found. Did find: /mydir/librepeater.dylib: mach-o, but wrong architecture 在Mac OS X上,我是否需要做一些不同的工作才能在Python中加载dynamic库?

python ctypes和sysctl

我有以下代码 import sys from ctypes import * from ctypes.util import find_library libc = cdll.LoadLibrary(find_library("c")) CTL_KERN = 1 KERN_SHMMAX = 34 sysctl_names = { 'memory_shared_buffers' : (CTL_KERN, KERN_SHMMAX), } def posix_sysctl_long(name): _mem = c_uint64(0) _arr = c_int * 2 _name = _arr() _name[0] = c_int(sysctl_names[name][0]) _name[1] = c_int(sysctl_names[name][1]) result = libc.sysctl(_name, byref(_mem), c_size_t(sizeof(_mem)), None, c_size_t(0)) if […]

ctypes加载具有依赖关系的ac共享库

在Linux上,我有一个交stream共享库,依赖于其他库。 LD_LIBRARY_PATH已正确设置为允许链接器加载所有库。 当我做: libgidcwf = ctypes.cdll.LoadLibrary(libidcwf_path) 我得到以下错误: Traceback (most recent call last): File "libwfm_test.py", line 12, in <module> libgidcwf = ctypes.cdll.LoadLibrary(libidcwf_path) File "/usr/lib/python2.5/ctypes/__init__.py", line 431, in LoadLibrary return self._dlltype(name) File "/usr/lib/python2.5/ctypes/__init__.py", line 348, in __init__ self._handle = _dlopen(self._name, mode) OSError: path-to-my-lib/libwav.so: undefined symbol: ODBCGeneralQuery 看来LD_LIBRARY_PATH在这里没有效果。 有没有办法让这些依赖库“可载入”? 先谢谢您的帮助。

Python的ctypes和没有足够的参数(4字节丢失)

我试图调用的函数是: void FormatError (HRESULT hrError,PCHAR pszText); 从一个自定义的DLL使用windll。 c_p = c_char_p() windll.thedll.FormatError(errcode, c_p) 结果是: ValueError: Procedure probably called with not enough arguments (4 bytes missing) 使用cdll而不是增加字节丢失计数器12.上面的errcode是从另一个函数返回的同一个dll的errercode。 我如何接听电话?

在Windows上访问python的msvcrt的方式有什么区别?

在Windows上,以下有什么区别? import msvcrt as x VS x = ctypes.cdll.msvcrt VS x = ctypes.CDLL(find_library('c')) VS x = ctypes.CDLL(ctypes.util.find_msvcrt()) 我相信文件说最后两个是相同的。 但前两个从来没有(清楚)logging,似乎更好。 例如,从使用不同msvcr*.dll (例如,matlab)的其他上下文运行python时,用第二个replace第三个解决了这个错误 。

与ctypes的标准输出redirect

我试图将printf函数的输出redirect到Windows上的文件。 我使用python3的ctypes来调用函数。 我的代码是: import os, sys from ctypes import * if __name__ == '__main__': print("begin") saved_stdout=os.dup(1) test_file=open("TEST.TXT", "w") os.dup2(test_file.fileno(), 1) test_file.close() print("python print") cdll.msvcrt.printf(b"Printf function 1\n") cdll.msvcrt.printf(b"Printf function 2\n") cdll.msvcrt.printf(b"Printf function 3\n") os.dup2(saved_stdout, 1) print("end") 但是当我从Eclipse运行代码时,屏幕上出现以下内容: begin end Printf function 1 Printf function 2 Printf function 3 …和TEST.txt中的以下内容 python print 当我从cmd运行这个,这是在屏幕上: begin end ..这是在TEST.txt中: python […]

微软ICertAdmin2接口从Python ctypes

我试图从ctypes使用Python的Microsofts ICertAdmin2接口。 http://msdn.microsoft.com/en-us/library/windows/desktop/aa383234(v=vs.85).aspx 到目前为止,我可以加载Certadm.dll。 例如 import ctypes # Load DLL into memory. dll = ctypes.WinDLL ("c:\\windows\\system32\\Certadm.dll") 但是,我不知道我现在需要做什么来访问ICertAdmin2内的方法,例如ICertAdmin2 :: ImportKey。 任何指导将非常感激。 UPDATE 现在使用Python的“comtypes”库。 这就是我想要的。 >>import comtypes >>certadmin = CreateObject("CertificateAuthority.Admin") >>certadmin._ICertAdmin__com_DenyRequest('WIN-3CF41NBPT85\cjndem-CA', 42) Traceback (most recent call last): File "<input>", line 1, in <module> COMError: (-2147024809, 'The parameter is incorrect.', (u'CCertAdmin::DenyRequest: The parameter is incorrect. 0x80070057 (WIN32: 87)', […]

如何使用python中的ctypes获取Windows窗口名称

我尝试通过长对象的句柄来获得Windows窗口标题名称和pid。 我的代码工作,但有一些问题。 当我得到10个或更多时,我只能获得4个窗口标题。 任何人都可以帮助,并告诉我如何解决这个代码? 我认为问题在于如何转换长对象(我不太了解它们,以及一般的ctypes)。 from __future__ import print_function from ctypes import * psapi = windll.psapi titles = [] # get window title from pid def gwtfp(): max_array = c_ulong * 4096 pProcessIds = max_array() pBytesReturned = c_ulong() psapi.EnumProcesses(byref(pProcessIds), sizeof(pProcessIds), byref(pBytesReturned)) # get the number of returned processes nReturned = pBytesReturned.value/sizeof(c_ulong()) pidProcessArray = [i for […]

在Python中格式化驱动器

我试图制作一个Python 3.3程序来格式化Windows中的驱动器,如SD卡或USB棒。 我试过这里的代码: http : //bytes.com/topic/python/answers/537724-formatting-device-script-windows 。 起初它给了我一个错误,但经过一些调整它没有。 它运行,但没有发生我的USB驱动器。 这是我正在使用的代码。 (这是使用ctypes模块btw)请帮助! def myFmtCallback(command, modifier, arg): print(command) return 1 # TRUE def format_drive(Drive, Format, Title): fm = windll.LoadLibrary('fmifs.dll') FMT_CB_FUNC = WINFUNCTYPE(c_int, c_int, c_int, c_void_p) FMIFS_HARDDISK = 0x0C fm.FormatEx(c_wchar_p(Drive), FMIFS_HARDDISK, c_wchar_p(Format), c_wchar_p(Title), True, c_int(0), FMT_CB_FUNC(myFmtCallback)) 我相应地调用这个函数: format_drive('F:\\', 'NTFS', 'USBDrive') 程序打印这个: >>> 9 11

Python | 访问DLL使用ctypes

我试图访问Firefox浏览器附带的DLL( nss3.dll )中的一些function。 为了处理这个任务,我在Python中使用了ctypes。 问题是,它在加载到内存中的DLL的初始点失败。 这是我必须这样做的代码片段。 >>> from ctypes import * >>> windll.LoadLibrary("E:\\nss3.dll") 我得到的例外是 Traceback (most recent call last): File "<pyshell#2>", line 1, in <module> windll.LoadLibrary("E:\\nss3.dll") File "C:\Python26\lib\ctypes\__init__.py", line 431, in LoadLibrary return self._dlltype(name) File "C:\Python26\lib\ctypes\__init__.py", line 353, in __init__ self._handle = _dlopen(self._name, mode) WindowsError: [Error 126] The specified module could not be found 我也尝试从Firefox安装path加载它假设可能有依赖关系。 […]