本篇文章将一些常见的错误复现与解决方案写出来供新手参考,旨在帮助新手更好的了解易语言,在用易语言编程的时候少踩坑。
常见错误:001症状:调试运行之后点击“按钮1”不会弹出信息框
病因:“将参数变量声明到组件事件里”治标:将“参数一”与“参数二”删除治本:组件事件的参数变量除了支持库自带的参数回调变量外,不允许用户额外声明组件事件子程序里的参数变量,牢记则治本
常见错误:002症状:声明了变量“A”与变量类型“整数型”也用“=”号赋值了但报错不是声明的变量类型“整数型”
病因:一行代码中连续出现两个“=”号则从第一个“=”号后的代码为一个整体判断治标:将第二个“=”号改为“+”号治本:A=A 自身等于自身无实际意义也会报错“错误(10092): 不能将变量自身赋值给自身。” A=A=1 这里第一个A看作是一个变量,第二个A=1 看作是一个判断,这里是表达的意思是 A是否等于1 是否在程序的表达是真假,也就是如果A=1,则这个判断的结果就是真,第一个A也就等于真,第一个A等于真了,真假的类型是逻辑型,这和开始声明的A是整数型不符,调试的时候易语言就检查到这个错误就报错了。牢记一行代码中出现的“=”号数量与第一个变量实际表达的意义是什么
常见错误:003病症:声明了自定义数据类型仍提示“错误(36): 找不到指定的对象成员命令名称“xx”。”
病因:模块或者支持库已定义了的自定义数据类型被用户重复在源码里重新定义,易语言自动将用户自己重新定义的自定义数据类型为首选加载。治标:删除自己重新声明的同名自定义数据类型,直接声明引用模块或者支持库已定义的自定义数据类型治本:自定义数据类型\DLL命令\子程序\类模块\资源文件\常量数据\全程局变量 这些需要声明或定义的数据易语言会在调试或者在编译的时候优先加载用户自己声明或定义的数据,没有找到匹配的才会去支持库或模块中寻找匹配的数据。牢记已声明或定义的过的数据无需重复声明或定义,直接引用即可。
常见错误:004
病症:已加载模块名,按模块里的命令参数提示传递的对应变量类型的参数但提示报错病因:加载两个拥有同名的模块,但命令参数不相同。治标:挨个删除已加载的模块,直到命令通过调试或者编译,将冲突的模块移除模块引用表。治本:易语言调试或编译的时候,对于从模块中引用名的顺序是按模块引用表的前后顺序引用的,如果你引用的命令在引用的第二个,但第一个模块也有同名的命令,则优先加载第一个模块的命令,如果第一个模块命令参数不同于第二个模块的命令,易语言就会报错。牢记引用的模块的时候尽量避免出现有同名但不同参数多个模块同时引用
常见错误:005病症:已赋值变量传递到命令里,最后调试输出的时候并不是一开始赋值的数据
病因:如果支持库或模块命中里有参考返回的参数变量,一旦命令内部对可参考返回的参数赋值,则会覆盖一开始赋值的数据治标:只声明变量,不对变量赋值,由命令内部自动赋值。治本:参考返回是为了让命令支持多个数据返回,理论上现有易语言的调用的命令返回值均只有一个,如果想返回多个则需要通过参考返回的形式将数据返回(注意:在易语言里数组、用户定义数据类型、库定义数据类型、文本型、字节集型数据是默认参考返回),在DLL命令中,参考返回为“传址”。牢记参考返回的变量无需在调用命令前赋值,注意参考返回的数据类型,避免声明的变量类型错误。
常见错误:006 病症:已声明变量且已赋值,但提示数据类型转换错误
病因:只声明了变量名未声明变量的数据类型治标:根据你赋值的数据的实际类型将声明的变量名定义对应的类型治本:易语言默认的数据类型(数值型[字节型、短整数型、整数型、长整数型、小数型、双精度小数型]、文本型、字节集、日期时间型、逻辑型),此外还有库定义的数据类型,用户自定义数据类型。而声明变量时类型不填写,易语言默认为整数型。牢记声明变量的时候除了填写变量名称也要记得填写对应的数据类型,如果声明的就是整数型则可以直接留空(不建议这么做哦),留空为整数型同样适用DLL命令与自定义数据类型的成员变量。
常见错误:007病症:正确声明了类模块,也正确传递了参数值,调用命令返回结果也是正确的,但最后效果是错误的
病因:类模块命令在引用的时候会自动运行类里面默认的“_初始化”子程序,在当前变量域结束的时候自动调用类里面的“_销毁”。除了调用一次便直接生效的类模块命令外,动态的调用的例如图中的“类_托盘”,在类自动调用“_销毁”之后,里面的类命令将全部失效治标:将动态调用类型的类模块声明到程序集变量或全局变量即可。治本:单独的子程序中,局部变量只会在该子程序被调用的时候有效,如果该子程序运行完毕,则子程序中的所有局部变量将失效。这里有前提条件,子程序中的局部变量没有设置为静态变量,因为按易语言的规则(如果局部变量在定义时此属性被设置为假,那么运行应用程序时,此变量在其所在子程序开始被执行前自动分配存储空间并初始化,在所在子程序执行完毕后自动释放所分配的存储空间。也就是说,变量的存储空间仅在其所在子程序执行过程中存在;如果此属性被设置为真,那么此变量与全局、程序集变量一样,被分配给在程序运行期间永久存在的存储空间并仅在应用程序启动运行前被初始化一次。)设置为静态变量后局部变量将和全部、程序集变量一样。注意这里类模块命令即时设置为静态局部变量但其他子程序仍不能直接调用该类模块的其他命令。牢记局部变量的特性与类模块命令的特性。
常见错误:008
病症:未勾选支持库但打开源码仍然能正常调用该支持库提供的命令,把源码发给也没勾选支持库的易友,易友打开源码提示xx支持库不存在,无法正常运行源码病因:未勾选支持库,本地易语言支持库文件夹里也没有这个支持库,只要打开的源码里调用了该支持库的命令易语言就会报xx支持库不存在。治标:下载提示中对应版本的支持库文件放到易语言根目录(\e\lib)文件夹中,重新打开源码即可。治本:发源码给易友或开源源码的时候如果用到了不常见或非官方支持库的支持库,尽量将该支持库的文件与源码打包发送或开源。因为易语言IDE加载支持库的方式是先将根目录(\e\lib)里的所有支持库文件(.fne)加载到内存里,再根据用户最后一次配置的支持库信息显示是否勾选,如果你没勾选但支持库配置表里有这个支持库,打开调用了这个支持库命令的源码也不会报错。牢记如果源码里用到了不常见或非官方的支持库的命令,尽量将该支持库(.fne)文件与源码打包,
常见错误:009
病症:将支持库文件(.fne)与源码打包给了易友,但对方只能调试与编译,不能静态编译。病因:未将(.fne)动态库对应的静态支持文件一起打包。治标:将(.fne)动态库对应的静态支持文件一起打包,将动态库(.fne)放到易语言根目录(\e\lib)文件夹中,静态支持文件(.lib与.res)放到易语言根目录(\e\static_lib)文件夹中,重新打开源码即可。治本:支持静态编译的支持库除了有(.fne)的动态库还有(.lib)与(.res)静态支持文件。牢记包含支持静态编译支持库的源码需要将动态(.fne)与静态(.lib与.res)一起打包再发送或开源,不然在打开源码静态编译的时候就会报错
常见错误:010病症:打开源码调试或编译的时候提示“错误(37): 找不到指定的命令/子程序/Dll命令调用名称xxx”
病因:调用了当前调试或编译环境里没有的命令治标:勾选对应的支持库或引用对应的的模块。治本:调试或编译的时候提示“错误(37)”,将提示的命令名在百度一下查找一下这个命令的出处。
Tip
善用F1:易语言IDE代码编辑区哪里不懂,鼠标点到那里再按F1,看提示信息,根据提示信息纠正错误。