递归火山软件开发平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 火山 源码 类库
查看: 1409|回复: 6
打印 上一主题 下一主题

[视窗] 自定义数据类型问题

[复制链接]

1

主题

20

帖子

457

积分

中级会员

Rank: 3Rank: 3

积分
457
跳转到指定楼层
楼主
发表于 2024-7-3 16:42:08 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
  1. typedef struct tagPROCESSENTRY32 {
  2.   DWORD     dwSize;
  3.   DWORD     cntUsage;
  4.   DWORD     th32ProcessID;
  5.   ULONG_PTR th32DefaultHeapID;
  6.   DWORD     th32ModuleID;
  7.   DWORD     cntThreads;
  8.   DWORD     th32ParentProcessID;
  9.   LONG      pcPriClassBase;
  10.   DWORD     dwFlags;
  11.   CHAR      szExeFile[MAX_PATH];
  12. } PROCESSENTRY32;
复制代码
像这种
dwSize
结构大小(以字节为单位)。 在调用 Process32First 函数之前,请将此成员设置为 sizeof(PROCESSENTRY32)。 如果未初始化 dwSize, 则 Process32First 将失败。

是只能通过嵌入sizeof(PROCESSENTRY32)设置还是火山本身也有方法可以直接设置。
回复

使用道具 举报

26

主题

1899

帖子

6920

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
6920
沙发
发表于 2024-7-3 22:32:43 | 只看该作者
用「本地结构+本地结构模板」封装,可以用「本地结构模板.取尺寸」
用「@视窗.结构类」封装,可以用「取结构数据尺寸」
回复

使用道具 举报

1

主题

20

帖子

457

积分

中级会员

Rank: 3Rank: 3

积分
457
板凳
 楼主| 发表于 2024-7-4 06:24:30 | 只看该作者
Xelloss0618 发表于 2024-7-3 22:32
用「本地结构+本地结构模板」封装,可以用「本地结构模板.取尺寸」
用「@视窗.结构类」封装,可以用「取结 ...

大佬,取结构数据尺寸这个具体怎么使用。
我这样写进程信息.dwSize = 取结构数据尺寸 (PROCESSENTRY32)这样子写用Process32First返回没有数据。
回复

使用道具 举报

14

主题

494

帖子

3059

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
3059
地板
发表于 2024-7-4 08:05:14 | 只看该作者
让易更易 发表于 2024-7-4 06:24
大佬,取结构数据尺寸这个具体怎么使用。
我这样写进程信息.dwSize = 取结构数据尺寸 (PROCESSENTRY32)这 ...

没有数据就是数据类型写错了

<火山程序 类型 = "通常" 版本 = 1 />

类 THREADENTRY32 <公开 基础类 = 本地结构模板 @别名 = "THREADENTRY32" @模板实现类 = "THREADENTRY32">
{
    变量 dwSize <公开 类型 = 整数 @输出名 = "dwSize">
    变量 cntUsage <公开 类型 = 整数 @输出名 = "cntUsage">
    变量 th32ThreadID <公开 类型 = 整数 @输出名 = "th32ThreadID">
    变量 th32OwnerProcessID <公开 类型 = 整数 @输出名 = "th32OwnerProcessID">
    变量 tpBasePri <公开 类型 = 整数 @输出名 = "tpBasePri">
    变量 tpDeltaPri <公开 类型 = 整数 @输出名 = "tpDeltaPri">
    变量 dwFlags <公开 类型 = 整数 @输出名 = "dwFlags">
}

类 THREADENTRY32结构类 <公开 @视窗.结构类 = 0>
{
    变量 dwSize <公开 类型 = 整数>
    变量 cntUsage <公开 类型 = 整数>
    变量 th32ThreadID <公开 类型 = 整数>
    变量 th32OwnerProcessID <公开 类型 = 整数>
    变量 tpBasePri <公开 类型 = 整数>
    变量 tpDeltaPri <公开 类型 = 整数>
    变量 dwFlags <公开 类型 = 整数>
}
回复

使用道具 举报

1

主题

20

帖子

457

积分

中级会员

Rank: 3Rank: 3

积分
457
5#
 楼主| 发表于 2024-7-4 09:58:35 | 只看该作者
福寿 发表于 2024-7-4 08:05
没有数据就是数据类型写错了




数据类型应该没写错啊
回复

使用道具 举报

26

主题

1899

帖子

6920

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
6920
6#
发表于 2024-7-4 11:17:43 | 只看该作者
让易更易 发表于 2024-7-4 09:58
数据类型应该没写错啊

类型明显错了。

<火山程序 类型 = "通常" 版本 = 1 />

类 PROCESSENTRY32W <公开 基础类 = 本地结构模板 注释 = "这种封装方法更好,类型直接等于结构体." 注释 = "既适合用嵌入语句封装命令,也适合表格封装DLL命令."
        注释 = "不必声明所有结构体成员(我这里注释了结构体中已经弃用的成员),也不必依照它原本的顺序." 注释 = "用\"ROCESSENTRY32W.取尺寸()\"返回结构体大小" 折叠
        @别名 = "ROCESSENTRY32W" @模板实现类 = "" @视窗.外部头文件 = "<tlhelp32.h>">
{
    变量 dwSize <公开 类型 = 整数 @输出名 = "dwSize">
    变量 "//cntUsage" <公开 类型 = 整数 @输出名 = "cntUsage">
    变量 th32ProcessID <公开 类型 = 整数 @输出名 = "th32ProcessID">
    变量 "//th32DefaultHeapID" <公开 类型 = 变整数 @输出名 = "th32DefaultHeapID">
    变量 "//th32ModuleID" <公开 类型 = 整数 @输出名 = "th32ModuleID">
    变量 cntThreads <公开 类型 = 整数 @输出名 = "cntThreads">
    变量 th32ParentProcessID <公开 类型 = 整数 @输出名 = "th32ParentProcessID">
    变量 pcPriClassBase <公开 类型 = 整数 @输出名 = "pcPriClassBase">
    变量 "//dwFlags" <公开 类型 = 整数 @输出名 = "dwFlags">
    变量 szExeFile <公开 类型 = "字符 [260]" @输出名 = "szExeFile">

    方法 进程文件名 <公开 静态 属性读 类型 = 文本型 注释 = "等同于szExeFile成员,方便返回文本型" 折叠 @嵌入式方法 = "">
    参数 本结构 <类型 = PROCESSENTRY32W>
    {
        @ @an<CVolString>(@<本结构>.szExeFile)
    }

    方法 Process32First <公开 静态 类型 = 逻辑型 注释 = "嵌入调用" 折叠 @嵌入式方法 = "">
    参数 hSnapshot <类型 = 变整数>
    参数 lppe <类型 = PROCESSENTRY32W>
    {
        @ :rocess32First((HANDLE)@<hSnapshot>, &@<lppe>)
    }

    方法 Process32First_ <公开 静态 类型 = 逻辑型 注释 = "表格调用" 折叠 @输出名 = "rocess32First" @视窗.输入 = "Kernel32.dll">
    参数 hSnapshot <类型 = 变整数>
    参数 lppe <类型 = PROCESSENTRY32W>
}

类 PROCESSENTRY32 <公开 注释 = "这个结构类本身不等于结构体,只建议在用表格封装DLL时使用." 注释 = "成员类型的尺寸必须跟结构体一样,封装之前要查文档."
        注释 = "别抄易语言的,易语言的结构体只支持32位,而且有些写法不太标准." 注释 = "用\"取结构数据尺寸 (PROCESSENTRY32)\"返回结构体大小" 折叠 @视窗.结构类 = 0>
{
    变量 dwSize <公开 类型 = 整数>
    变量 cntUsage <公开 类型 = 整数>
    变量 th32ProcessID <公开 类型 = 整数>
    变量 th32DefaultHeapID <公开 类型 = 变整数>
    变量 th32ModuleID <公开 类型 = 整数>
    变量 cntThreads <公开 类型 = 整数>
    变量 th32ParentProcessID <公开 类型 = 整数>
    变量 pcPriClassBase <公开 类型 = 整数>
    变量 dwFlags <公开 类型 = 整数>
    变量 szExeFile <公开 类型 = "字符 [260]">

    方法 Process32First <公开 静态 类型 = 逻辑型 折叠 @输出名 = "rocess32First" @视窗.输入 = "Kernel32.dll">
    参数 hSnapshot <类型 = 变整数>
    参数 lppe <类型 = PROCESSENTRY32 @视窗.输出参数 = 真>
}
回复

使用道具 举报

26

主题

1899

帖子

6920

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
6920
7#
发表于 2024-7-4 11:19:13 | 只看该作者
可以参考「PIV模块」的 快照辅Zhu类
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|递归火山软件开发平台 ( 鄂ICP备18029190号 )

GMT+8, 2024-11-23 09:32 , Processed in 0.108141 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表