Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用ctypes和windl处理Python中的DWORD。Python中的指针?_Python_Delphi - Fatal编程技术网

用ctypes和windl处理Python中的DWORD。Python中的指针?

用ctypes和windl处理Python中的DWORD。Python中的指针?,python,delphi,Python,Delphi,我目前正在进行一个项目,通过一个预打包的动态链接库来控制外部设备,我必须说,ctypes库确实让生活变得更加轻松!但是,我使用的一些从Delphi导入的函数需要DWORD类型的句柄作为参数。我在试图传递一个整数作为参数时遇到了一些麻烦。在Delphi代码中,通过将longword类型中的变量作为参数传递,它可以正常工作。以下是一些代码片段: Delphi中变量的定义和传递函数。函数DmxProOpen将序列号作为参数,并返回句柄以传递给其他函数: function DmxProOpen (cSe

我目前正在进行一个项目,通过一个预打包的动态链接库来控制外部设备,我必须说,ctypes库确实让生活变得更加轻松!但是,我使用的一些从Delphi导入的函数需要DWORD类型的句柄作为参数。我在试图传递一个整数作为参数时遇到了一些麻烦。在Delphi代码中,通过将longword类型中的变量作为参数传递,它可以正常工作。以下是一些代码片段:

Delphi中变量的定义和传递函数。函数DmxProOpen将序列号作为参数,并返回句柄以传递给其他函数:

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