在ctypes中我有
TBButton.ptr(ctypes.UInt64("0x1e677e60")
这相当于此行代码中的aButton.address()
:
var rez = SendMessage(hToolbar, 0x417 /** TB_GETBUTTON **/, 1, aButton.address());
当我运行此代码时,我收到错误:
异常:期望类型intptr_t,得到TBButton.ptr(ctypes.UInt64(" 0xaa4eb20"))
所以这是因为在我的SendMessage
定义中我有这个:
var SendMessage = user32.declare('SendMessageW', ctypes.winapi_abi, ctypes.intptr_t,
ctypes.voidptr_t, // HWND
ctypes.uint32_t, // MSG
ctypes.uintptr_t, // WPARAM
ctypes.intptr_t // LPARAM
);
所以我的问题是:TBButton.ptr(ctypes.UInt64("0x1e677e60")
的类型是什么,因此我可以将LPARAM
定义中的SendMessage
更改为此类型。
或者可选:是否可以将其设为intptr_t
?
像ctypes.intptr_t(aButton.address())
这样的东西,我试过它,它没有用。
答案 0 :(得分:1)
它是指向TBButton
的指针,无论TBButton
是什么,而intptr_t
实际上是一个足以容纳指针地址的整数。
您需要将指针强制转换为intptr_t
。
var lparam = ctypes.cast(tbbuttonptr, ctypes.intptr_t);