js-ctypes:指向intptr_t的指针

时间:2014-06-18 08:25:03

标签: javascript firefox-addon jsctypes

在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())这样的东西,我试过它,它没有用。

1 个答案:

答案 0 :(得分:1)

它是指向TBButton的指针,无论TBButton是什么,而intptr_t实际上是一个足以容纳指针地址的整数。

您需要将指针强制转换为intptr_t

var lparam = ctypes.cast(tbbuttonptr, ctypes.intptr_t);