com客户端上的ctypes错误

2024-05-15 12:20:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建一个com客户端来向服务器发送消息。我有oleviewer定义并用python创建了结构(类),这些结构(类)用于构造一个包含更多结构和枚举的复杂结构。在

似乎一切都很顺利,但当我试图将SampleObject*传递给客户机调用时,我得到了以下错误:

ctypes.ArgumentError: argument 1: <type 'exceptions.TypeError'>:
expected LP__SampleObject instance instead of LP__SampleObject

这看起来很奇怪。我所做的是(这是我得到错误的地方):

^{pr2}$

我试过很多方法,但都绕不开这个错误。有什么想法吗?在

(obj只是一个cc.CreateObject()coclass对象,工作正常)

我真的看不出问题所在,甚至连comtype定义都在界面中显示:

( ['in'], POINTER(_SampleObject), 'pAction' ),

完全符合指针(对话框)。这是一个非常奇怪的错误,可能是comtypes上的but吗?在


Tags: com消息客户端客户机定义type错误argument
1条回答
网友
1楼 · 发布于 2024-05-15 12:20:11

您是否多次定义ctypes结构和参数的联合?在

如果您定义了一个StructureUnion子类,在C库函数的argtypes中使用它,重新定义结构或联合,然后尝试将重新定义的类的实例传递给C函数,您将得到与您看到的类似的错误。在

我取了我在this answer中使用的代码,并添加了一个(完全不必要的)与它一起使用的结构的重新定义。(我还将结尾处的byref改为pointer-使用byref会给您一个不同的错误消息。)Python代码的结果如下:

from ctypes import *

class TestStruct(Structure):
    _fields_ = [("a", c_int),
                ("array", (c_float * 4) * 30)]

slib = CDLL("slib.dll")
slib.print_struct.argtypes = [POINTER(TestStruct)]
slib.print_struct.restype = None

# Redefine the ctypes structure.
class TestStruct(Structure):
    _fields_ = [("a", c_int),
                ("array", (c_float * 4) * 30)]

t = TestStruct()

for i in range(30):
    for j in range(4):
        t.array[i][j] = i + 0.1*j

slib.print_struct(pointer(t))

当我运行这个修改过的脚本时,我得到了以下输出:

^{pr2}$

相关问题 更多 >