用ctypes和windl处理Python中的DWORD。Python中的指针?
我目前正在进行一个项目,通过一个预打包的动态链接库来控制外部设备,我必须说,ctypes库确实让生活变得更加轻松!但是,我使用的一些从Delphi导入的函数需要DWORD类型的句柄作为参数。我在试图传递一个整数作为参数时遇到了一些麻烦。在Delphi代码中,通过将longword类型中的变量作为参数传递,它可以正常工作。以下是一些代码片段: Delphi中变量的定义和传递函数。函数DmxProOpen将序列号作为参数,并返回句柄以传递给其他函数:用ctypes和windl处理Python中的DWORD。Python中的指针?,python,delphi,Python,Delphi,我目前正在进行一个项目,通过一个预打包的动态链接库来控制外部设备,我必须说,ctypes库确实让生活变得更加轻松!但是,我使用的一些从Delphi导入的函数需要DWORD类型的句柄作为参数。我在试图传递一个整数作为参数时遇到了一些麻烦。在Delphi代码中,通过将longword类型中的变量作为参数传递,它可以正常工作。以下是一些代码片段: Delphi中变量的定义和传递函数。函数DmxProOpen将序列号作为参数,并返回句柄以传递给其他函数: function DmxProOpen (cSe
function DmxProOpen (cSerNo: pchar; var dHandle: DWORD): integer;
stdcall; external 'DmxPro.dll'; // function definition in delphi
dLocalHandle : longword;
procedure TForm1.btnOpenClick (Sender: TObject);
const
SERNO : pchar = 'EN096445';
begin
lblStatus.Caption:=inttostr( DmxProOpen(SERNO,dLocalHandle) );
end;
以下是Python中的错误:
File "C:\Users\Labor-Laptop\Desktop\2-ARRI-DOWLIGHT\USB-DMX-DLL\USB-DMX-DLL\Ansteuerung Python.py", line 33, in <module>
printOpenReturnValue(DLLIMPORT.DmxProOpen(SERNO, dLocalHandle))
OSError: exception: access violation writing 0x0000000000000000
我还尝试使用from ctype import DWORD导入DWORD类型,但出现如下错误:
File "C:\Users\Labor-Laptop\Desktop\2-ARRI-DOWLIGHT\USB-DMX-DLL\USB-DMX-DLL\Ansteuerung Python.py", line 6, in <module>
from ctypes import DWORD
ImportError: cannot import name 'DWORD' from 'ctypes' (C:\Users\Labor-Laptop\anaconda3\lib\ctypes\__init__.py)
文件“C:\Users\Labor Laptop\Desktop\2-ARRI-DOWLIGHT\USB-DMX-DLL\USB-DMX-DLL\Ansteuerung Python.py”,第6行,在
从ctypes导入DWORD
ImportError:无法从“ctypes”(C:\Users\Labor Laptop\anaconda3\lib\ctypes\\uuu init\uuuuuuuuuux.py)导入名称“DWORD”)
我真的很感谢你的帮助!提前谢谢你,祝你有愉快的一天!
更新:我试图找到一种方法来传递一个指向函数的指针,但是当我一直在互联网上寻找时,根本没有办法在python中指定一个指针。我该怎么办?
更新2:
我试过c_char_p和c_void_p,但都不起作用:
printOpenReturnValue(DLLIMPORT.DmxProOpen(SERNO, dLocalHandle))
ArgumentError: argument 2: <class 'TypeError'>: Don't know how to convert parameter 2
printOpenReturnValue(DLLIMPORT.DmxProOpen(SERNO,dLocalHandle))
ArgumentError:参数2::不知道如何转换参数2
您需要传递一个指向dLocalHandle
的指针,而不是它的值。是的,我知道句柄本身就是一个指针。但是如何在python中指定一个呢?我对Python还是新手。我认为它会起作用,因为在Delphi中,他们只使用长单词,它相当于C++中的无符号整数。它在Delphi中起作用是因为var
关键字。谢谢你的回答!但是,我找不到在Python中使用指针的方法…:(一个简单的搜索就会给出。你需要传递一个指向dLocalHandle
的指针,而不是它的值。是的,我知道句柄本身就是一个指针。但是我如何在python中指定一个呢?我对python还是新手。我认为它会起作用,因为在Delphi中,他们只使用Longword,它相当于C++中的无符号整数,它在Delphi bec中工作由于var
关键字。谢谢您的回答!但是我找不到在Python中使用指针的方法…:(一个简单的搜索给出了答案。
printOpenReturnValue(DLLIMPORT.DmxProOpen(SERNO, dLocalHandle))
ArgumentError: argument 2: <class 'TypeError'>: Don't know how to convert parameter 2