云外归鸟工作室网站

标题: 白月完全静态合成编译模式详解 [打印本页]

作者: 云外归鸟    时间: 2023-11-27 01:01
标题: 白月完全静态合成编译模式详解
本帖最后由 云外归鸟 于 2023-11-28 12:04 编辑

新增加的模式就是类似于黑月,当具备两个条件:
一、没有任何易窗口数据。
二、所有用到的支持库都有静态库版本。

自动转入该模式,在输出窗口有提示:
[attach]565[/attach]
编译成功后以下提示窗口,声音挺吓人,给你一激灵 不喜欢的话,可以在白月设置的“每次都询问……”的勾选去掉,只凭以上提示已经进入该模式。
[attach]566[/attach]

核心库大部分命令函数采用被封七号修改的黑月核心库,COM对象为了与易语言保持一致,移植自易的官方核心静态库。虽然用黑月核心库部分代码,但是白月模式和黑月的结构不同。白月有优化和改进。
白月全静态模式引入了C++的异常捕获机制 try{}catch(...){},所有易的错误都会抛出,不会有太多的文字提示,只凭错误代号,确定错误原因(错误显示给普通用户也没什么用处,程序编写者知道就行)。
比如易的内部发生错误,抛出代号如下:
[attach]567[/attach]

错误代号是1,对应以下列表的:"数组成员引用下标超出定义范围"
1、"数组成员引用下标超出定义范围",
2、"未得到所需要的数值型数据",
3、"引用数组成员时维数不为1且不等于该数组目前所具有的维数",
4、"数组成员引用下标必须大于等于1",
5、"数据或数组类型不匹配",
6、"调用DLL命令后发现堆栈错误,通常是DLL参数数目不正确",
7、"子语句参数未返回数据或者返回了非系统基本类型或数组型数据",
8、"被比较数据只能使用等于或不等于命令比较",
9、"“多项选择”命令的索引值参数小于零或超出了所提供参数表范围",
10、"“重定义数组”命令的数组维定义参数值必须大于零或单维时大于等于零",
11、"所提供参数的数据类型不符合要求"


错误代号是1000~2039的,是内部未能实现的函数功能号。

其它是直接抛出错误文本或是未确定的代码,都表示有错误发生。

异常捕获会首先检查系统API的错误码,GetLastError(),如果有错误码就会取出系统错误文本,是由系统语言决定的文字,使错误提示国际化。

你可以在返回时,设置自己指定错误码,系统会翻译出相对应的错误文本,错误代码看VC的源码的WINERROR.H,也可看百度百科的解释
[attach]568[/attach]

对于窗口程序,是弹出错误信息框。
对于控制台程序,是将错误文本输出到错误通道,不弹出信息框。
对于DLL,则是直接抛出异常,如果上层调用没有异常捕获的,就会导致进程出错强制结束,如果有异常捕获,就可以继续运行,不受DLL的异常影响 。

注意:
1、用“置入代码”修改ESP寄存器的地址,任意跳转返回的骚操作都会被认为是异常抛出。
2、因为用到C++的异常捕获机制,汇编壳不能使用了,归为MFC外壳同一样的,白月全静态编译只有两种壳:MFC壳和C/C++壳。


白月全静编的界面设计

通常的方式:
1、手搓窗口界面,用CreateWindow,用组件的类名创建,缺点显而易见,需要不断的修改代码数值,调整组件的位置和大小,很麻烦。
2、像其它语言和黑月,自带RC脚本和资源文件,编译合成这些资源到一个资源数据包res文件,再链接合成到PE结构里。缺点是要带上RC脚本文件和一堆零散的图标等文件。不符合易语言用户一个源码文件就可以包括所有,方便传递的习惯。而且调试时,还要先把资源编译好,再植入调试版本的EXE里面,操作复杂。

白月采用更简单的办法,符合易用户的习惯。白月已经移植了易原程序的图标、XP风格的XML文本和版本信息。其它资源不太重要。
只要把对话框和菜单数据单独的导入就行了。也可以调试。
用到下三种工具和步骤进行提取和导入:
黑月资源编辑器:
[attach]569[/attach]
设计你的对话框界面和菜单,保存为一个RC文件。并导出所用到的控件编号Ctrl+C复制,和粘贴到白月的编辑器里。

资源编译器(用易编译写的界面):
[attach]570[/attach]

选择编写好的RC脚本文件,编译生成同名的Res资源文件。

资源骇客:

[attach]571[/attach]

打开编译好的RES文件,从里面分别提取出对话框和菜单数据,是选择中后,右键菜单:选将资源保存为二进制*.bin文件。
这个资源骇客也可以攫取其它软件的对话框界面为自己所用。

再导入到易语言的图片资源里待用:
[attach]572[/attach]

用到的三个工具和源码例程的RC文件下载地址


白月创建窗口界面的例程:
[attach]573[/attach]


作者: dingpengdhr    时间: 2023-11-28 08:01
  大鸟还没有放弃 真好




欢迎光临 云外归鸟工作室网站 (http://www.ywgn.net/) Powered by Discuz! X3