事实的确是这样的,我用eax中的值作为父节点的句柄可以创建子节点。
但是如果我用mov hParent,eax之后,再用hParent(dw型)无法创建子节点。会提示 invalid struction operands.
但我查了一些资料都说HTREEVIEW是dw类型。不得其解。
部分源码
.data
hParent dd ?
……
invoke SendDlgItemMessage,hWnd,TVW,TVM_INSERTITEM,0,addr tvinsert
mov hParent, eax
mov tvinsert.hParent, hParent (如果是 ‘mov tvinsert.hParent, eax’ 就可以)
……
9 个解决方案
#1
HTREEITEM TreeView_InsertItem(
HWND hwndTV,
LPTVINSERTSTRUCT lpis
);
HWND hwndTV,
LPTVINSERTSTRUCT lpis
);
#2
编译为 32 位程序的话用 dd,64 位程序用 dq。
#3
据我网上搜索 dw 实际上是 WORD 类型也就是 unsigned short,用这个存储句柄……
#4
我用dd定义的。想表达这是dword类型。没表述清楚。
#5
dw 实际上是
define
WORD
dd 实际上是 define double WORD
dd 实际上是 define double WORD
#6
没错吧。我用dd定义hParent来当做句柄,就是double word类型啊。 问题里面的dw指的是double word,是我没用对词。
#7
mov tvinsert.hParent, hParent
这是一条 内存 到 内存 的 操作 , 不可以 吧
这是一条 内存 到 内存 的 操作 , 不可以 吧
#8
mov tvinsert.hParent, hParent
要求 2个 变量的 地址 , cpu 地址总线 只能 发一个变量的地址, 所以 2个 内存变量 不能在一条指令 中处理。
这就是 DMA (direct memory access)的 作用
要求 2个 变量的 地址 , cpu 地址总线 只能 发一个变量的地址, 所以 2个 内存变量 不能在一条指令 中处理。
这就是 DMA (direct memory access)的 作用
#9
你是对的,用offset就可以了。我基础不扎实。
#1
HTREEITEM TreeView_InsertItem(
HWND hwndTV,
LPTVINSERTSTRUCT lpis
);
HWND hwndTV,
LPTVINSERTSTRUCT lpis
);
#2
编译为 32 位程序的话用 dd,64 位程序用 dq。
#3
据我网上搜索 dw 实际上是 WORD 类型也就是 unsigned short,用这个存储句柄……
#4
我用dd定义的。想表达这是dword类型。没表述清楚。
#5
dw 实际上是
define
WORD
dd 实际上是 define double WORD
dd 实际上是 define double WORD
#6
没错吧。我用dd定义hParent来当做句柄,就是double word类型啊。 问题里面的dw指的是double word,是我没用对词。
#7
mov tvinsert.hParent, hParent
这是一条 内存 到 内存 的 操作 , 不可以 吧
这是一条 内存 到 内存 的 操作 , 不可以 吧
#8
mov tvinsert.hParent, hParent
要求 2个 变量的 地址 , cpu 地址总线 只能 发一个变量的地址, 所以 2个 内存变量 不能在一条指令 中处理。
这就是 DMA (direct memory access)的 作用
要求 2个 变量的 地址 , cpu 地址总线 只能 发一个变量的地址, 所以 2个 内存变量 不能在一条指令 中处理。
这就是 DMA (direct memory access)的 作用
#9
你是对的,用offset就可以了。我基础不扎实。