调用dll函数,该函数需要从python指向句柄(win32)的指针

用户名

我正在尝试为WinXP计算机上的相机编写一个非常简单的控制器。而不是编写C代码,我想我只会使用ctypes访问dll。

要启动相机,您必须致电:

BeginHVDevice(int nDevice, HHV *pHandle)

* pHandle是指向摄像机句柄的指针,在.h文件中,它简单地定义为

typedef HANDLE HHV;

我以为以下应该起作用

from ctypes import *
from ctypes.wintypes import *


ailt_lib = cdll.LoadLibrary("HVDAILT")
load_camera = ailt_lib.BeginHVDevice
load_camera.restype = c_int
load_camera.argtypes = [c_int, POINTER(HANDLE)]

def initDev(res=(800,600)):

    cam_int = c_int(1)
    cam_handle_type = POINTER(HANDLE)
    print cam_handle_type
    cam_handle = cam_handle_type()
    print cam_handle

    cam_stat = load_camera(cam_int, cam_handle )
    print cam_stat
    return cam_handle

但是,当我调用initDev()时,得到了ValueError:所调用的过程没有足够的参数(缺少8个字节)或错误的调用约定。我很确定这意味着我还没有产生兼容的指针来传递,但是我无法弄清楚该函数实际上想要接收什么。

我花了几天时间搜索stackoverflow,查看了ctypes文档并尝试了各种排列,但是我没有找到答案。

孙ry

似乎该函数正在使用stdcall而不是cdecl调用约定,即使用ctypes.WinDLL代替ctypes.CDLL同样,它想要一个指向可以存储该句柄的内存位置的指针,但是您向它传递了一个NULL指针。而是将其传递给wintypes.HANDLE

from ctypes import *
from ctypes.wintypes import *

ailt_lib = WinDLL("HVDAILT")
load_camera = ailt_lib.BeginHVDevice
load_camera.restype = c_int
load_camera.argtypes = [c_int, POINTER(HANDLE)]

def initDev(res=(800,600)):    
    cam_int = 1
    cam_handle = HANDLE()    
    cam_stat = load_camera(cam_int, byref(cam_handle))
    print 'cam_stat:', cam_stat
    print 'cam_handle:', cam_handle
    return cam_handle

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Python 在传感器的 DLL 中调用 SDK 函数,该函数采用指针 IP 和端口并返回 void*(void* 配置文件传感器的句柄。)

来自分类Dev

从Julia调用Win32函数

来自分类Dev

当我使用参数调用Win32函数时,为什么GCC使用帧指针?

来自分类Dev

如果函数需要指向类的指针,则该函数将完全脱离候选列表

来自分类Dev

当它是指向类函数的指针但在该类之外时如何正确调用该函数

来自分类Dev

Fortran接口调用C函数,该函数返回指向数组的指针

来自分类Dev

当它是指向类函数的指针但在该类之外时如何正确调用该函数

来自分类Dev

为什么在 WIN32 项目中需要 MyRegisterClass() 函数?

来自分类Dev

指向函数调用的指针与指向成员函数调用的指针

来自分类Dev

指向函数调用的指针与指向成员函数调用的指针

来自分类Dev

GetMenuBarInfo()Win32函数

来自分类Dev

调用win32 API并回调类函数

来自分类Dev

从C#调用C dll中的函数,该函数将某种类型的指针返回到函数指针

来自分类Dev

无法从 C DLL 调用该函数

来自分类Dev

指向指针的c ++指针和接收指向指针的调用函数

来自分类Dev

错误:绑定函数的指针只能用于调用该函数

来自分类Dev

从C#调用非托管C DLL函数(具有指向struct的指针和指向bool数组的指针)

来自分类Dev

由void *指针指向的调用函数

来自分类Dev

通过指向类成员的指针调用函数

来自分类Dev

无法调用指向成员函数的指针

来自分类Dev

“指向常量的无常量指针”调用函数

来自分类Dev

函数调用中指向 const 的指针

来自分类Dev

编写一个函数,该函数将指向任何函数的指针作为参数

来自分类Dev

Perl Win32 :: API-在与DLL函数之间来回传递数组时出现问题

来自分类Dev

我是否需要从localtime()函数中释放返回的指针?

来自分类Dev

谁在调用该函数?

来自分类Dev

从LLVM调用Win32 / 64函数的正确方法是什么?

来自分类Dev

如何从MFC应用程序调用函数的Win32 API版本?

来自分类Dev

使用私有成员函数调用Win32 QueueUserWorkItem()

Related 相关文章

  1. 1

    Python 在传感器的 DLL 中调用 SDK 函数,该函数采用指针 IP 和端口并返回 void*(void* 配置文件传感器的句柄。)

  2. 2

    从Julia调用Win32函数

  3. 3

    当我使用参数调用Win32函数时,为什么GCC使用帧指针?

  4. 4

    如果函数需要指向类的指针,则该函数将完全脱离候选列表

  5. 5

    当它是指向类函数的指针但在该类之外时如何正确调用该函数

  6. 6

    Fortran接口调用C函数,该函数返回指向数组的指针

  7. 7

    当它是指向类函数的指针但在该类之外时如何正确调用该函数

  8. 8

    为什么在 WIN32 项目中需要 MyRegisterClass() 函数?

  9. 9

    指向函数调用的指针与指向成员函数调用的指针

  10. 10

    指向函数调用的指针与指向成员函数调用的指针

  11. 11

    GetMenuBarInfo()Win32函数

  12. 12

    调用win32 API并回调类函数

  13. 13

    从C#调用C dll中的函数,该函数将某种类型的指针返回到函数指针

  14. 14

    无法从 C DLL 调用该函数

  15. 15

    指向指针的c ++指针和接收指向指针的调用函数

  16. 16

    错误:绑定函数的指针只能用于调用该函数

  17. 17

    从C#调用非托管C DLL函数(具有指向struct的指针和指向bool数组的指针)

  18. 18

    由void *指针指向的调用函数

  19. 19

    通过指向类成员的指针调用函数

  20. 20

    无法调用指向成员函数的指针

  21. 21

    “指向常量的无常量指针”调用函数

  22. 22

    函数调用中指向 const 的指针

  23. 23

    编写一个函数,该函数将指向任何函数的指针作为参数

  24. 24

    Perl Win32 :: API-在与DLL函数之间来回传递数组时出现问题

  25. 25

    我是否需要从localtime()函数中释放返回的指针?

  26. 26

    谁在调用该函数?

  27. 27

    从LLVM调用Win32 / 64函数的正确方法是什么?

  28. 28

    如何从MFC应用程序调用函数的Win32 API版本?

  29. 29

    使用私有成员函数调用Win32 QueueUserWorkItem()

热门标签

归档