首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PYthon类型的'TypeError‘LP_LP_c_long实例而不是_ctypes.PyCPointerType

PYthon类型的'TypeError‘LP_LP_c_long实例而不是_ctypes.PyCPointerType
EN

Stack Overflow用户
提问于 2021-05-22 21:42:37
回答 1查看 1.3K关注 0票数 0

我尝试使用用C++编写的dll。它具有以下职能:

代码语言:javascript
复制
bool PMDllWrapperClass::GetDeviceList(DEVICE** pDeviceArray, int* nDeviceCount, LAN_DEVICE** pLanDeviceArray, int LanDeviceCount, int InterfaceTypeToSearch)

我试过:

代码语言:javascript
复制
cP = ctypes.POINTER(ctypes.POINTER(ctypes.c_int64))
cIP = ctypes.POINTER(ctypes.c_int32)
cLP = ctypes.POINTER(ctypes.c_int32)
cDC = ctypes.c_int32()
cIS = ctypes.c_int32()


resultgetdev = PMDll.GetDeviceList(cP, cIP, cLP, cDC, cIS)

但上面写着:

代码语言:javascript
复制
ctypes.ArgumentError: argument 1: <class 'TypeError'>: expected LP_LP_c_long instance instead of _ctypes.PyCPointerType

我也试过使用双指针,但non也为此而工作。我能用ctype来解决这个问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-25 19:26:53

错误消息是由于传递类型而不是实例造成的。您应该声明参数类型和返回类型,这样ctype就可以重复检查传递的值是否正确。

这需要更多的信息才能准确,但您需要的最低要求是:

test.cpp

代码语言:javascript
复制
#ifdef _WIN32
#   define API __declspec(dllexport)
#else
#   define API
#endif

struct DEVICE;
struct LAN_DEVICE;

extern "C" __declspec(dllexport)
bool GetDeviceList(DEVICE** pDeviceArray, int* nDeviceCount, LAN_DEVICE** pLanDeviceArray, int LanDeviceCount, int InterfaceTypeToSearch) {
    return true;
}

test.py:

代码语言:javascript
复制
from ctypes import *

class DEVICE(Structure):
    _fields_ = () # members??

class LAN_DEVICE(Structure):
    _fields_ = () # members??

dll = CDLL('./test')
dll.GetDeviceList.argtypes = POINTER(POINTER(DEVICE)), POINTER(c_int), POINTER(POINTER(LAN_DEVICE)), c_int, c_int
dll.GetDeviceList.restype = c_bool

device_list = POINTER(DEVICE)()     # create instances to pass by reference for output(?) parameters
landev_list = POINTER(LAN_DEVICE)()
dev_count = c_int()

lan_count = 5    # ??
search_type = 1  # ??

result = dll.GetDeviceList(byref(device_list),byref(dev_count),byref(landev_list),lan_count,search_type)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67654418

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档