递归火山软件开发平台

标题: 【求助】火山视窗中怎么封装含联合体 union 的结构体? [打印本页]

作者: raomengkai    时间: 2024-11-25 16:14
标题: 【求助】火山视窗中怎么封装含联合体 union 的结构体?
本帖最后由 raomengkai 于 2024-11-25 16:15 编辑

需要封装 INPUT 这个结构体,想采用别名封装方式,发现该结构体中含有一个联合体,请问这种结构体该怎么封装?
  1. typedef struct tagINPUT {
  2.   DWORD type;
  3.   union {
  4.     MOUSEINPUT    mi;
  5.     KEYBDINPUT    ki;
  6.     HARDWAREINPUT hi;
  7.   } DUMMYUNIONNAME;
  8. } INPUT, *PINPUT, *LPINPUT;
复制代码


还有就是该结构体在函数 SendInput 中使用,可能会使用到该结构体的数组,如果该结构体能使用别名封装方式封装,那又该怎么封装成数组来使用呢?


望大神们解答!谢谢!

作者: hcwanz    时间: 2024-11-25 16:57
把联合体成员当作所属结构体的成员来调用就行.数组也是用结构体数组就行.

只要不同时调用联合体成员就好

作者: raomengkai    时间: 2024-11-25 18:50
hcwanz 发表于 2024-11-25 16:57
把联合体成员当作所属结构体的成员来调用就行.数组也是用结构体数组就行.

只要不同时调用联合体成员就好

感谢提醒,忘了使用别名封装不需要按照结构成员的原本顺序排列这个特性了,所以别名封装可以同时将 mi ki 和 hi 一起封进去,这倒是解决了联合体封装的问题了,十分感谢!但是你说“数组也是用结构体数组就行”是什么意思呢?是使用“结构数组模板类”吗?我试过使用“结构数组模板类”将别名封装的INPUT结构体再次封装成数组结构会出现错误呢!
作者: hcwanz    时间: 2024-11-25 19:59
那用`标准数组模板类`试试
作者: Xelloss0618    时间: 2024-11-25 21:04
用别名可以封装,这个API我有写过,你可以参考 PIV模块的「键鼠输入」类
作者: raomengkai    时间: 2024-11-26 19:15
本帖最后由 raomengkai 于 2024-11-26 19:20 编辑
hcwanz 发表于 2024-11-25 19:59
那用`标准数组模板类`试试

试了下“标准数组模板类”,果然可以!非常感谢!
作者: raomengkai    时间: 2024-11-26 19:19
Xelloss0618 发表于 2024-11-25 21:04
用别名可以封装,这个API我有写过,你可以参考 PIV模块的「键鼠输入」类

感谢你的回复!下了 PIV模块 看了下,发现他用的是他自己的“PIV数组模板”,4楼的朋友说可以用“标准数组模板类”,我试了一下没问题,就还是用“标准数组模板类”算了,毕竟是原生库里的,免得又去安装额外的库!感谢你的回复!
作者: Xelloss0618    时间: 2024-11-26 21:32
raomengkai 发表于 2024-11-26 19:19
感谢你的回复!下了 PIV模块 看了下,发现他用的是他自己的“PIV数组模板”,4楼的朋友说可以用“标准数 ...

没区别的,PIV数组模板算是标准数组模板类的升级版,补充了更多功能。




欢迎光临 递归火山软件开发平台 (https://bbs.voldp.com/) Powered by Discuz! X3.4