递归火山软件开发平台

标题: 【征集案例】现征集一个复杂嵌套的结构体c++代码 [打印本页]

作者: 创世魂    时间: 2023-7-18 20:57
标题: 【征集案例】现征集一个复杂嵌套的结构体c++代码
本帖最后由 创世魂 于 2023-7-18 20:59 编辑

现征集一个复杂嵌套的结构体案例,越复杂越好。征集到合适的结构体案例后届时会用火山将这个结构体使用案例写出来,用于丰富结构体使用案例。


要求如下:
1、存在多层结构体嵌套。
2、存在嵌套的同时还存在数组(不管是动态数组还是固定成员数组,又或者是数组还嵌套数组)
3、最好还存在“传址”。

总之越复杂越好。。。。。。。。。


除此之外,最好是微软api里面的案例,因为这个api写例子可以很快写完看到效果。

如果是第三库,需要提供开发文档编译好的dll,以及是哪个函数存在结构体。。便于演示火山怎么编写调用。。(并不会将整个库封装,只会演示这个存在结构体的方法方法怎么写)

当然有能力的大佬,也可以自己写个cpp文件,c++代码中存在上述描述的这种复杂的结构体嵌套问题,并公开一个方法出来,方便演示火山如何调用。


本次案例吴总会亲自出马编写,所以希望有能力或者有相关api封装需求的都来积极发帖回复。。
当然不会使用嵌入式代码,而是用火山表格实现。






作者: edu    时间: 2023-7-19 01:11
好好好
作者: fengyishen    时间: 2023-7-19 10:45
擦,之前遇到过几次这样情况,可惜一时想不起来了。
作者: yifan09    时间: 2023-7-19 10:59
出一个写办公软件插件的案例,不是辅Zhu(Waigua),是插件。
作者: dengzf    时间: 2023-7-19 13:55
火山的 @视窗.结构类 中不支持使用文本型, 如何处理? 用指针吗下面这种呢?
#define MAX_SPINDLE     24    这个宏的值是根据系统加载环境不同, 自动判断加载哪一个的 , 它的值 4, 8 ,24
typedef struct odbact2 {
         short        datano;                /* spindle number */
         short        type;                /* dummy */
         long        data[MAX_SPINDLE];        /* spindle data */
} ODBACT2 ;


还有这种, 宏值得* 数值 的数组
/* 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 21:03
本帖最后由 阿海 于 2023-7-24 13:38 编辑

我用现在的案例已经解决了火山结构体在嵌入代码的使用但是实际使用中C++用的是结构体数组来接收信息传递的,能否安排一个C++结构体数组与火山结构体数组的案例C++源码: (, 下载次数: 6)
2.9. 设备枚举
void WINAPI WCHBLEEnumDevice(ULONG scanTimes, PCHAR DevIDFilter, BLENameDevID*
pBLENameDevIDArry, PULONG pNum);
该函数会在规定时间扫描附近设备并通过结构体数组返回扫描结果。
参数scanTimes是指定扫描时间,以ms为单位;
参数DevIDFilter是过滤名称字符串,如果为空则返回扫描到的所有设备;
参数pBLENameDevIDArry为扫描结果结构体数组,结构体定义如下
struct BLENameDevID
{
UCHAR Name[MAX_PATH];
UCHAR DevID[MAX_PATH];
int Rssi;
};
其中Name[MAX_PATH]是设备名;
DevID[MAX_PATH]是设备路径;
Rssi 为扫描到设备时的Rssi(信号强度)值;
参数pNum是指定扫描设备数量,并且在函数执行完会返回真是扫描到的设备数量。

还有这种结构体嵌套结构体的
VCI_AUTO_SEND_OBJ 结构体嵌套
typedef struct _VCI_AUTO_SEND_OBJ{
BYTE Enable;
BYTE Index;
DWORD Interval;
VCI_CAN_OBJ Obj;//报文
}VCI_AUTO_SEND_OBJ,*PVCI_AUTO_SEND_OBJ;

VCI_CAN_OBJ 结构体是 CAN 帧结构体,即 1 个结构体表示一个帧的数据结构。在发
送函数 VCI_Transmit 和接收函数 VCI_Receive 中,被用来传送 CAN 信息帧。

typedef struct _VCI_CAN_OBJ {
UINT ID;
UINT TimeStamp;
BYTE TimeFlag;
BYTE SendType;
BYTE RemoteFlag;
BYTE ExternFlag;
BYTE DataLen;
BYTE Data[8];
BYTE Reserved[3];
} VCI_CAN_OBJ, *PVCI_CAN_OBJ;







作者: 暴风    时间: 2023-7-20 19:44
不是很复杂的嵌套结构数组

(, 下载次数: 10)

作者: 创世魂    时间: 2023-7-23 08:52
阿海 发表于 2023-7-19 21:03
我用现在的案例已经解决了火山结构体在嵌入代码的使用但是实际使用中C++用的是结构体数组来接收信息传递的 ...

要有相关api或者相关cpp代码,便于参考编写。。
作者: 创世魂    时间: 2023-7-23 08:52
fengyishen 发表于 2023-7-19 10:45
擦,之前遇到过几次这样情况,可惜一时想不起来了。

下次遇到了,来这个帖子发帖
作者: 创世魂    时间: 2023-7-23 08:55
dengzf 发表于 2023-7-19 13:55
火山的 @视窗.结构类 中不支持使用文本型, 如何处理? 用指针吗下面这种呢?
#define MAX_SPINDLE     24     ...

不知道这个系统环境是指什么??火山里面有条件编译,可以定义多个相同的结构体,然后不同的条件加载不同的结构体。
就可以勉强实现你这个效果,但是不知道你这个环境不同具体是个啥。。
作者: 呵呵仙8    时间: 2023-7-23 10:12
就调用易写的DLL结构体.就不支持吧.如DLL中有基本类型,文本型,字节集,类,以及带有它们的数组,压根火山就构造不了这些结构,谈何调用?
作者: 呵呵仙8    时间: 2023-7-23 10:19
本帖最后由 呵呵仙8 于 2023-7-23 12:30 编辑

(, 下载次数: 11) 这样的结构,火山如何安全调用?
https://bbs.125.la/forum.php?mod=viewthread&tid=14205977


作者: 安若清风    时间: 2023-7-23 16:30
可以看下zint库的结构体

作者: 创世魂    时间: 2023-7-23 22:44
呵呵仙8 发表于 2023-7-23 10:19
这样的结构,火山如何安全调用?
https://bbs.125.la/forum.php?mod=viewthread&tid=14205977

恩,我发给吴总了,应该有空来看。
作者: 阿海    时间: 2023-7-24 08:02
创世魂 发表于 2023-7-23 08:52
要有相关api或者相关cpp代码,便于参考编写。。

代码上传到哪里

作者: 阿海    时间: 2023-7-24 08:08
创世魂 发表于 2023-7-23 08:52
要有相关api或者相关cpp代码,便于参考编写。。

魂总,上次了C++源码了
作者: dengzf    时间: 2023-7-24 14:05
创世魂 发表于 2023-7-23 08:55
不知道这个系统环境是指什么??火山里面有条件编译,可以定义多个相同的结构体,然后不同的条件加载不同 ...

c++ 宏定义,  根据执行条件, 宏定义的值是不同的,也就是有多个相同名的宏定义, 编译时根据当前的执行环境执行不同的宏值

作者: 创世魂    时间: 2023-7-25 07:37
dengzf 发表于 2023-7-24 14:05
c++ 宏定义,  根据执行条件, 宏定义的值是不同的,也就是有多个相同名的宏定义, 编译时根据当前的执行环境 ...

火山里面有条件编译你可以编写多个结构体,提供不同的宏。这个你要具体看看条件编译的案例。
作者: 创世魂    时间: 2023-7-25 07:38
阿海 发表于 2023-7-19 21:03
我用现在的案例已经解决了火山结构体在嵌入代码的使用但是实际使用中C++用的是结构体数组来接收信息传递的 ...

https://bbs.voldp.com/thread-7050-1-1.html  火山更新了复杂结构体案例,可以先看看。
作者: 创世魂    时间: 2023-7-25 07:39
呵呵仙8 发表于 2023-7-23 10:12
就调用易写的DLL结构体.就不支持吧.如DLL中有基本类型,文本型,字节集,类,以及带有它们的数组,压根火山就 ...

https://bbs.voldp.com/thread-7050-1-1.html  火山更新了复杂结构体案例,可以先看看。已经支持文本型




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