- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Python 并尝试使用 WinUSB(来自 Microsoft)与这个简单的 USB 设备进行通信。我遇到了问题,因为为了找到设备,调用 setupAPI 函数 SetupDiEnumDeviceInterfaces 需要一个结构对象,我将其定义为一个类:
class _SP_DEVINFO_DATA:
def __init__(self, ClassGUID, DevInst = ""):
'''flags = SPINT_DEFAULT, SPINT_REMOVED, or SPINT_ACTIVE'''
self._ClassGUID = None
self._DevInst = None
self._Reserved = None
self._cbSize = None
###Getters:
def getClassGUID(self):
return self._ClassGUID
def getDevInst(self):
return self._DevInst
def getReserved(self):
return self._Reserved
def getcbSize(self):
return self._cbSize
###Setters:
def setClassGUID(self, value):
self._ClassGUID = value
def setDevInst(self, value):
self._DevInst = value
def setReserved(self, value):
self._Reserved = value
def setcbSize(self):
self._cbSize = sys.getsizeinfo(self)
ClassGUID = property(getClassGUID, setClassGUID, None, "Class GUID")
DevInst = property(getDevInst, setDevInst, None, "Device Instance")
Reserved = property(getReserved, setReserved, None, "RESERVED: DO NOT USE")
cbSize = property(getcbSize, setcbSize, None, "CB Size. Set automatically")
我尝试使用该属性,因为它给了我错误:
<type 'exceptions.TypeError'>: Don't know how to convert parameter
否则,我读到像这样定义参数可以解决问题,但事实并非如此,而且我不确定在这里要做什么。
我想使用WinUSB,因为我只需要从设备读取数据并写入设备,仅此而已,WinUSB 似乎有我需要的东西,但在我解决这个问题之前,我有点卡住了
有什么建议吗?如何将类对象传递给使用 ctypes.windll.LoadLibrary(DLL) 加载的 DLL 函数?
如果有更简单的方法来做到这一点,我也完全支持。
谢谢。
最佳答案
正如@Roland所说,您必须从ctypes.Structure
派生。这是一个工作版本:
import ctypes
from ctypes import wintypes
import uuid
class _SP_DEVINFO_DATA(ctypes.Structure):
_fields_ = [("cbSize", wintypes.DWORD),
("ClassGuid", ctypes.c_char * 16),
("DevInst", wintypes.DWORD),
("Reserved", wintypes.LPVOID)]
def __init__(self, guid, inst):
self.cbSize = ctypes.sizeof(_SP_DEVINFO_DATA)
self.ClassGuid = uuid.UUID(guid).get_bytes()
self.DevInst = (ctypes.c_ulong)(inst)
self.Reserved = None
def __repr__(self):
return "_SP_DEV_INFO_DATA(cbsize={},ClassGuid={},DevInst={})".format(
self.cbSize,uuid.UUID(bytes=self.ClassGuid),hex(self.DevInst))
sp = _SP_DEVINFO_DATA('08751880-13bb-11e2-96f0-402cf4ca5e51',0x12345678)
print sp
输出:
_SP_DEV_INFO_DATA(cbsize=28,ClassGuid=08751880-13bb-11e2-96f0-402cf4ca5e51,DevInst=0x12345678L)
关于python - 如何将类对象传递给 ctypes.windll.LoadLibrary(DLL) 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12829642/
按安卓版本安卓 2.3.3 - 2.3.7 385 65.5%安卓 4.2 155 26.4%安卓 4.3 28 4.8%安卓 4.0.3 - 4.0.4 20 3.4% 按设备擎天柱 L3 (e0)
如果我使用 Win32 API LoadLibrary 连续 3 次加载相同的 DLL,它应该返回 3 个不同的句柄,并且每个库中的函数都应该有不同的地址,对吗? (或者它会做一些“智能”的事情并检测
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我很难理解为什么 C++ 中同时需要 #include 和 LoadLibrary()。在 C++ 中,“#include”强制预处理器将 #include 行替换为您包含的文件的内容(通常是包含声明
我知道在 Linux 下,您可以使用 dlopen(NULL, RTLD_*) 获取调用程序的句柄。有没有办法在 Windows 中使用 LoadLibrary 这样做?我试过使用 LoadLibra
我有一个由 Jet excelsior 生成的 .dll,我试图从它们生成的调用 dll 中提取类。我正在关注他们最初用 c 语言完成的示例脚本。尽管进行了数小时的研究和故障排除,但我无法启动 Loa
我的目录结构如下: test dir a.dll <-- version 1 a.dll <-- version 2 myapp.exe 我预计 LoadLibrary("
我主要是一名 .net 开发人员,用 C++ 做一些小事,所以我遇到了一些麻烦。 我正在使用 hInst = LoadLibrary(TEXT("mydll.dll")); 加载另一个 C++ dll
if (LoadLibrary(L"d:\\cwebpage.dll")) MessageBox(0, L"Loaded", L"ERROR", MB_OK); else Message
我在想如果有几个类来包装 LoadLibrary 和 GetProcAddress、Library 和 Function struct Function { Function(Library&
来自 MSDN : The system maintains a per-process reference count on all loaded modules. Calling LoadLibr
我正在使用 Code::Blocks 并且讨厌手动链接 DLL。我找到了 LoadLibrary()功能,我想知道它是否像 .a 一样工作或 .lib文件会。这个功能是这样工作的吗?如果没有,我可以通
我的代码使用 LoadLibraryA("someDLL.dll");它开始搜索文件 someDLL.dll 的路径是什么?另一个问题:LoadLibraryA 函数是否区分大小写?我的意思是如果我有
我正在使用 CreateRemoteProcess 将一些汇编程序代码注入(inject)远程进程(64 位),然后加载一个 dll,但我在 LoadLibraryA 中得到一个 C0000005 E
我正在尝试使用 LoadLibrary(...) 函数,它接收一个字符串到文件名(.dll 或 .exe)或文件路径。我遇到的问题是文件名本身有多个句点/点。 例子: HINSTANCE hInst
是否可以在调用 LoadLibrary() 时静默捕获错误弹出窗口,例如“过程入口点 xxx 无法位于动态链接库 xxx 中”? 最佳答案 您可以通过调用 SetErrorMode() 来抑制错误弹出
我一直在做 JNA有一段时间了。但是有一件事,我一直没明白。例如,在加载库时: Map options = new HashMap(); options.put(Library.OPTION_CALL
我正在修复其他人的代码并注意到该人多次调用 LoadLibrary,如下所示: LoadLibrary("C:\\Windows\\SysWOW64\\msjint40"); LoadLibrary(
我给了我的软件用户一个从打开文件对话框中选择dll的机会。(这样我的用户就可以从我的网站下载dll并将其与主项目一起使用)。一切工作正常,它甚至可以发现 dll 是由我提供的或选择了无效的 dll。但
我一直在尝试使用 C++ 加载 32 位 dll(从 32 位应用程序,在 Windows 7 64 位上)。 LoadLibrary 返回 NULL,GetLastError 返回 126,表示“找
我是一名优秀的程序员,十分优秀!