life999 发表于 2025-8-20 14:33:11

关于结构体的浅显问题。有人愿意帮忙回答下吗?

本帖最后由 life999 于 2025-8-20 14:34 编辑

Local $str = "int var1;byte var2;uint var3;char var4"
Local $a = DllStructCreate($str)
If @error Then
    MsgBox(4096,"","DllStructCreate 发生错误" & @error);
    Exit
EndIf

DllStructSetData($a, "var1", -1)
DllStructSetData($a, "var2", 255)
DllStructSetData($a, "var3", -1)
DllStructSetData($a, "var4", "Hello")
DllStructSetData($a, "var4", Asc("h"), 1)

MsgBox(4096,"DllStruct","数据结构大小: " & DllStructGetSize($a) & @CRLF & _
      "数据结构指针: " & DllStructGetPtr($a) & @CRLF & _
      "Data:" & @CRLF & _
      DllStructGetData($a, 1) & @CRLF & _
      DllStructGetData($a, 2) & @CRLF & _
      DllStructGetData($a, 3) & @CRLF & _
      DllStructGetData($a, 4) & @CRLF & _
      DllStructGetData($a, 4,1))

$a = 0

帮助文件里面说DllStructGetData第三个参数是索引,默认返回索引1
为什么DllStructGetData($a, 4)输出的是一个字符串"hello"
DllStructGetData($a, 4,1))输出的是一个字符 h


邪恶海盗 发表于 2025-8-20 15:09:47

你的“元素”是数组么?


user3000 发表于 2025-8-20 15:53:32

DllStructGetData($a, 4)   返回数据结构的第4个元素的全部数据

DllStructGetData($a, 4,1))返回数据结构的第4个元素的第1个字符 h
注: Au3的结构体继承自C语言,C字符串可以都看作数组,
你完全可以把结构体看作复杂多嵌套的数组, 但其索引较特殊, 以1为开头

life999 发表于 2025-8-20 16:54:47

user3000 发表于 2025-8-20 15:53
DllStructGetData($a, 4)   返回数据结构的第4个元素的全部数据

DllStructGetData($a, 4,1))返回数据结 ...

感谢回答。。要学习DllStructGetData,需要先学习什么?

user3000 发表于 2025-8-21 15:43:01

要把问题先简单化,理解什么是结构体
把结构体看作复杂多嵌套的数组, 但其索引较特殊, 以1为开头
读写操作:   读 = GetData ; 写 = SetData

你想再深入应当要多花点时间,了解C语言的变量类型,结构体其实就是将多种C变量类型融合存储到起来,
你读写时得注意数据类型的存储长度,它跟数组一样存在越界风险
页: [1]
查看完整版本: 关于结构体的浅显问题。有人愿意帮忙回答下吗?