递归火山软件开发平台
标题: 有关c++结构的封装示例: [打印本页]
作者: 飞扬工作室 时间: 2023-7-18 17:24
标题: 有关c++结构的封装示例:
下面的程序演示了如何定义封装C++结构,以及如何封装内嵌结构,及内嵌结构数组:
<火山程序 类型 = "通常" 版本 = 1 />
类 PROCESSENTRY32 <公开 @视窗.结构类 = 0>
{
变量 dwSize <公开 类型 = 整数>
变量 cntUsage <公开 类型 = 整数>
变量 th32ProcessID <公开 类型 = 整数>
变量 th32DefaultHeapID <公开 类型 = 变整数>
变量 th32ModuleID <公开 类型 = 整数>
变量 cntThreads <公开 类型 = 整数>
变量 th32ParentProcessID <公开 类型 = 整数>
变量 pcPriClassBase <公开 类型 = 整数>
变量 dwFlags <公开 类型 = 整数>
变量 szExeFile <公开 类型 = "短整数 [260]" 注释 = "如果是A版本API使用,此处需要将\"短整数\"改成\"字节\".">
变量 ""
变量 成员2 <公开 类型 = 结构2 注释 = "内嵌结构">
变量 成员3 <公开 类型 = "结构2 [100]" 注释 = "内嵌结构数组">
}
类 结构2 <公开 @视窗.结构类 = 0>
{
变量 dwSize <公开 类型 = 整数>
变量 cntUsage <公开 类型 = 整数>
变量 成员2 <公开 类型 = 结构3>
}
类 结构3 <公开 @视窗.结构类 = 0>
{
变量 dwSize <公开 类型 = 整数>
变量 cntUsage <公开 类型 = 整数>
}
作者: 15930887162 时间: 2023-7-18 18:07
沙发。。。。。
作者: 呵呵仙8 时间: 2023-7-18 18:11
原来如此,都支持复制,粘贴多行代码了?
作者: voldev. 时间: 2023-7-18 18:18
前排留名
作者: 大有可为 时间: 2023-7-18 19:02
已经支持了
作者: numbersir 时间: 2023-7-19 07:26
结构嵌套封装例子
作者: 明靓 时间: 2023-7-19 07:37
你才发现啊,哈哈哈
作者: 折戟沉沙 时间: 2023-7-19 11:31
typedef struct _RTL_PROCESS_MODULE_INFORMATION {
HANDLE Section; // Not filled in
PVOID MappedBase;
PVOID ImageBase;
ULONG ImageSize;
ULONG Flags;
USHORT LoadOrderIndex;
USHORT InitOrderIndex;
USHORT LoadCount;
USHORT OffsetToFileName;
UCHAR FullPathName[256];
} RTL_PROCESS_MODULE_INFORMATION, *PRTL_PROCESS_MODULE_INFORMATION;
typedef struct _RTL_PROCESS_MODULES {
ULONG NumberOfModules;
RTL_PROCESS_MODULE_INFORMATION Modules[1];
} RTL_PROCESS_MODULES, *PRTL_PROCESS_MODULES;
吴总,这种结构体呢,Modules[],这个是未知长度,需要通过NumberOfModules才知道。
(, 下载次数: 114)
这是我自己内嵌写的,如何用火山来表达?
作者: dengzf 时间: 2023-7-19 13:43
本帖最后由 dengzf 于 2023-7-19 15:31 编辑
火山的 @视窗.结构类 中不支持使用文本型, 如何处理? 用指针吗下面这种呢?
另外 下面这些如何在火山语法中实现?
#define MAX_SPINDLE 24 这个宏的值是根据系统加载环境不同, 自动判断加载哪一个的 , 它的值 4, 8 ,24
typedef struct odbact2 {
short datano; /* spindle number */
short type; /* dummy */
long data[MAX_SPINDLE]; /* spindle data */
} ODBACT2 ;
还有这种, 宏值* 数值 的数组 MAX_AXIS 也是一个条件变化的宏, 8 12 48 96这样
/* cnc_rdzofsr64:read work zero offset value(area specified) */
typedef struct iodbzor64 {
short datano_s; /* start offset number */
short type; /* axis number */
short datano_e; /* end offset number */
short dummy; /* dummy */
REALDATA data[MAX_AXIS*8]; /* offset value */ 宏值* 数值 的数组
} IODBZOR64; /* In case that the number of axes is MAX_AXIS, the number of data is 7 */
作者: 飞扬工作室 时间: 2023-7-19 16:36
折戟沉沙 发表于 2023-7-19 11:31
typedef struct _RTL_PROCESS_MODULE_INFORMATION {
HANDLE Section; // Not filled in
PVOID MappedBase;
这种内嵌可变的,用字节集配合结构的S类型把.
作者: 飞扬工作室 时间: 2023-7-19 16:37
一样封一个,配合编译条件使用.
作者: dengzf 时间: 2023-7-19 17:10
视窗.结构体 中不支持 文本型与其它类型,, 这要如何搞法才好?, 易语言中结构支持文本型, 用起来简单
作者: 飞扬工作室 时间: 2023-7-19 17:56
文本型在结构类中使用变整数,传递文本数据时传递文本指针过去: 取文本指针 (文本数据)
下一版中会直接支持文本型
作者: 呵呵仙8 时间: 2023-7-19 18:47
本帖最后由 呵呵仙8 于 2023-7-19 18:50 编辑
的确应该有易语言的文本型结构,字节集结构,单精度小数。这样才能让易用户更好的转用火山。
作者: dengzf 时间: 2023-7-19 19:38
确实如此
作者: Xelloss0618 时间: 2023-7-19 20:51
建议用表格封装 API 的时候,如果文本型参数是空对象,就传 NULL。
因为很多 API 的文本指针参数是需要用到 NULL 的,现在封装这种 API 都只能用变整数,而不能用文本型
作者: 飞扬工作室 时间: 2023-7-19 21:14
单精度小数使用"@视窗.单精度小数"属性定义一下对应成员即可
作者: 008 时间: 2023-7-19 21:47
6666666666666
作者: dengzf 时间: 2023-7-19 22:07
本帖最后由 dengzf 于 2023-7-19 22:18 编辑
结构体中也不支持这种 模板数组类 自定义与基本数组类都不支持, 上面发的结构体中的不明确个数的数组[]
可以用c++代码将对应 数组[?] 的值 用加入成员到 模板数组类接收到火山的表格中来,这样比生成多个类同的结构体要省事
<火山程序 类型 = "通常" 版本 = 1 />
类 REALDATA <公开 注释 = "" @视窗.结构类 = 0>
{
变量 val <公开 类型 = 小数 注释 = " data value" @输出名 = "val">
变量 dec <公开 类型 = 长整数 注释 = " decimal point" @输出名 = "dec">
变量 dummy <公开 类型 = 长整数 注释 = "" @输出名 = "dummy">
}
类 REALDATA数组类 <公开 基础类 = 对象数组模板类 @模板实现类 = "REALDATA">
#
类 IDBWRA64 <公开 注释 = " /* cnc_prstwkcd64:preset work coordinate */" @视窗.结构类 = 0>
{
变量 datano <公开 类型 = 小数 注释 = " dummy" @输出名 = "datano">
变量 type <公开 类型 = 长整数 注释 = " axis number" @输出名 = "type">
变量 dummy <公开 类型 = 长整数 注释 = " dummy2" @输出名 = "dummy">
变量 data <公开 类型 = REALDATA数组类 注释 = "preset data MAX_AXIS 数组维数 4 32 48 72 96" @输出名 = "data">
}
作者: fengyishen 时间: 2023-7-22 03:05
(, 下载次数: 71)
吴总,请问这种结构体有办法用表格封装吗?
作者: 暴风 时间: 2023-7-22 08:35
- struct PathSegmentData
- {
- bool IsBezier;
- std::vector<D2D1_POINT_2F> Points; // for IsBezier == false
- std::vector<D2D1_BEZIER_SEGMENT> Beziers; // for IsBezier == true
- };
- struct PathFigureData
- {
- D2D1_POINT_2F StartPoint;
- D2D1_FIGURE_BEGIN FigureBegin;
- D2D1_FIGURE_END FigureEnd;
- std::vector<PathSegmentData> Segments;
- };
复制代码 这个结构能搞吗
作者: 飞扬工作室 时间: 2023-7-22 09:44
句柄和指针全用变整数,RECT用矩形类,DWORD和UINT用整数.
作者: 飞扬工作室 时间: 2023-7-22 09:45
这个里面包含动态数组类对象,只能嵌入解决.
作者: zmfree 时间: 2023-7-22 10:32
我以为是直接写c代码的结构休代码!!!
作者: fengyishen 时间: 2023-7-22 16:02
重点是想问嵌套的自定义结构构,嵌套的结构指针,这两个的写法
作者: 飞扬工作室 时间: 2023-7-22 17:00
嵌套的自定义结构: 你定义一个对应的结构类,直接使用该结构类作为数据类型就行了,譬如"矩形类".
嵌套的自定义结构指针: 所有指针都是变整数
作者: mxbczs 时间: 2023-7-23 08:31
支持!!
作者: 暴风 时间: 2023-7-25 13:10
看到更新了结构类, 现在是否支持- struct PathSegmentData
- {
- bool IsBezier;
- std::vector<D2D1_POINT_2F> Points; // for IsBezier == false
- std::vector<D2D1_BEZIER_SEGMENT> Beziers; // for IsBezier == true
- };
- struct PathFigureData
- {
- D2D1_POINT_2F StartPoint;
- D2D1_FIGURE_BEGIN FigureBegin;
- D2D1_FIGURE_END FigureEnd;
- std::vector<PathSegmentData> Segments;
- };
复制代码
作者: 飞扬工作室 时间: 2023-7-25 13:36
用第一种方式: 结构基础类
作者: server 时间: 2023-7-25 16:27
变量 szExeFile <公开 类型 = "短整数 [260]" 注释 = "如果是A版本API使用,此处需要将\"短整数\"改成\"字节\".">
给个属性,自动跟随编译位数而变化呢??
作者: 飞扬工作室 时间: 2023-7-25 18:02
现在都是用 W 版,A版本很少用了
欢迎光临 递归火山软件开发平台 (https://bbs.voldp.com/) |
Powered by Discuz! X3.4 |