递归火山软件开发平台

标题: 浅谈火山的结构体 [打印本页]

作者: 沉默流星    时间: 6 天前
标题: 浅谈火山的结构体
开篇前,先说明下我是没有使用过易语言的,知道易语言是还是13年那会,游戏比较流行修改内存之类的。但那个时候只在网咖中安装写了个调试输出就没兴趣往下学了。

通过近期我想研究中文编程工具时,找到开源的中文编程工具源码基本是易语言写的,而我又不会易语言。

这里可能会有提出疑问的,易语言还不简单,火山都能学会易语言还不是轻松上手。

易语言给我的感受是简单上手又不限制用户的发展,如DLL在易语言中就非常容易整,同样的微软API,在易语言中非常好整,在火山中使用@视窗.输入+@输出名可能还会出现问题。当然使用嵌入式是可以轻松解决的。


这里浅谈我自己的看法,不涉及任何人。如有雷同纯属巧合。


火山用户百分之20是易语言转过来的,百分之10是自学原生语言之后或者直接知道火山工具时直接转过来的。
对于易语言用户来说,易语言代码移植到火山中是非常简单的。因为大部分转过来的易语言用户都系统学习过系统函数知道他们的作用和最终实现的结果。
对于直接上手火山的用户来说,火山中虽然函数名和易语言的函数名大部分一致,但有些就算是同样的名字,调用和传参数是千差万别。最终会导致看到易语言代码转到火山中去是困难重重。

这里可能又有提出疑问的,既然想把易语言代码移植到火山,自学一下易语言不就行了,网上视频教程和帖子和文档多的是。基本一个多星期就差不多了。

想到这个层面的,恭喜你打败百分之98的人。但事物都是有两面性的,学习的过程当中难免会沉迷进去,就跟小说中的主角一样,扮演着扮演着就沉迷其中了,有可能学习易语言的过程当中,反而喜欢上了易语言的操作。

回归正题,易语言中的结构体是自定义数据类型,火山中的结构体需要使用@视窗.结构类属性才行。我呢在整这个易语言中的结构体时就被易语言的特性吸引了,他直接就写个名字,里面有数据的话写个名字和数据类型就行了。


说这么多不是为了提建议或者教吴总做事,而是作为自己学习火山之后又移植易语言代码过程当中的体会做个笔记。





作者: cxz7411    时间: 6 天前
火山的结构体是为了兼容c++,毕竟大部分结构体都来自c++的头文件,这样火山的结构体和c++的才能互相转换.易语言的不行.你真正写程序,用到c++的结构体的时候才会理解.
作者: 沉默流星    时间: 6 天前
cxz7411 发表于 2025-4-15 16:27
火山的结构体是为了兼容c++,毕竟大部分结构体都来自c++的头文件,这样火山的结构体和c++的才能互相转换.易语 ...

我没说火山的结构体不好,而是火山的结构体在我理解的范围中,使用@符号是封装用户需要掌握的。在兼职手册中也再三强调封装人员尽量不使用@符号相关的写例子。

但通过视窗的结构体和火山服务器中的结构体。他们都使用了@符号相关的属性进行扩展才能支持。在官方例子中大量使用了@本地类来写服务器

如视窗的是@视窗.结构类 。服务器的是@本地类
作者: hcwanz    时间: 6 天前
其实无论是火山视窗, 还是c++, 结构体和类都是一回事.
class 类1{int 成员方法();};
struct 结1{int 成员方法();};
这两唯一的区别就是`结1`的成员是默认公开的, `类1`的成员是默认私有的.

乃至于:
class 类1: public 结1{};
让类继承自结构体也是完全可行的的.

所以我一直觉的吴总在火山里把结构体搞的这么特殊, 完全没必要.
弄个关键词的替换选项就行.

作者: 沉默流星    时间: 6 天前
hcwanz 发表于 2025-4-15 16:55
其实无论是火山视窗, 还是c++, 结构体和类都是一回事.
class 类1{int 成员方法();};
struct 结1{int 成员方 ...

好像有错别字把,我学的C++好像是struct 结构体中的成员默认是公开的,class 类中的成员默认是 private 私有的。从C++之父写的书籍当中记载,结构体和类是没有本质区别的,无非是成员权限不一样。
作者: 先生    时间: 6 天前
现在的火山普通人搬不了C的代码而且易语言的也不难搬来火山
作者: Xelloss0618    时间: 6 天前
都是最早的火山设计导致的问题,一开始火山里的所有对象,都要求继承火山的对象类。
继承了类,自然就写不出纯粹的结构体,只有用 @视窗.结构类 这个属性打补丁,但它还不是结构体,只是在类型内部给你搞了个不可见的结构体类型,还需要用函数转换。

火山要求继承对象类,也不是什么为了跟C++兼容,什么都拿对象类套了一层,自然就不是C++本身的类型了,也徒增了不少封装的难度。

现在本地结构、本地类等别名类型,都是封装go之后才加的。
作者: 沉默流星    时间: 6 天前
先生 发表于 2025-4-15 16:59
现在的火山普通人搬不了C的代码而且易语言的也不难搬来火山

那你肯定会易语言,我文中也提到过,对于学过易语言的用户来说简单的很。
作者: 沉默流星    时间: 6 天前
Xelloss0618 发表于 2025-4-15 16:59
都是最早的火山设计导致的问题,一开始火山里的所有对象,都要求继承火山的对象类。
继承了类,自然就写不 ...

X大说的比较中肯。
作者: 乐易论坛    时间: 6 天前
首先要说一句 不是20%从易语言  应该是80%吧
作者: 沉默流星    时间: 6 天前
本帖最后由 沉默流星 于 2025-4-15 17:11 编辑
乐易论坛 发表于 2025-4-15 17:09
首先要说一句 不是20%从易语言  应该是80%吧

易语言的用户量很大,我说的是转过来的。有8000人嘛。这个百分之20是按易语言200万用户量来算的,百分之20已经很高了
作者: 兵三进一    时间: 6 天前
乐易论坛 发表于 2025-4-15 17:09
首先要说一句 不是20%从易语言  应该是80%吧

俺也一样
作者: 乐易论坛    时间: 6 天前
沉默流星 发表于 2025-4-15 17:10
易语言的用户量很大,我说的是转过来的。有8000人嘛。这个百分之20是按易语言200万用户量来算的,百分之20 ...

如果说按照易语言的人数算比例的话 估计不到20%
我说的是按照火山的人数...
作者: 冰山一角    时间: 6 天前
看来之前设计的思路,如果要想跟c+结合还要改动!
作者: 福寿    时间: 6 天前
其实没必要纠结这个,很多用易语言的人都是依赖模块的,离开模块基本上也就那样,没必要说得那么明显,至于你说的调用dll,如果都是用表格的话,_fastcall约定火山用表格来调用就很轻松,易语言用表格就没法调用了,需要获取地址来调用,你试试就知道了
作者: 78592802    时间: 4 天前
刚从易语言转过来时,火山的结构体不是一般的难用,简直是用不来,调用API传结构体都改成指针了,结构中套结构的那种简直没法用,后面出了本地结构之后还好一些了,虽然比易语言稍微麻烦一点要对应上输出名,但可以用的起来了,估计刚从易语言转到火山的大部分还是有些懵,不走一圈弯路上不了正轨。

作者: ku2017    时间: 3 天前
我会易语言, 但不少功能 想搬火山并不轻松 可能是我还不够了解火山




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