📄 tech.txt
字号:
/*
版权声明:
本文件及其中所有实例的版权均为易语言作者吴涛所有,仅授权给第三方用作开发易语言支持库,禁止用于其他任何场合。
*/
制作易语言支持库的详细步骤及方法说明:
/*****************************************************************/
1、易语言支持库实际上是一个DLL动态连接库,此库中必须输出一个名为 GetNewInf 的函数,原型见下:
#define FUNCNAME_GET_LIB_INFO "GetNewInf" // 取本支持库的PLIB_INFO指针的输出函数名称
typedef PLIB_INFO (WINAPI *PFN_GET_LIB_INFO) (); // GetNewInf的函数原型
支持库文件名的后缀必须固定为.FNx,其中x为一类型字母,目前有意义的后缀有:
1、“.fne”: 带编辑信息、有运行支持代码的支持库;
2、“.fnl”: 带编辑信息、无运行支持代码的支持库;
3、“.fnr”: 不带编辑信息、有运行支持代码的支持库;
/*****************************************************************/
2、该输出函数返回支持库内部的一个 LIB_INFO 数据结构,该数据结构的定义及成员说明如下:
typedef struct
{
DWORD m_dwLibFormatVer;
// 库格式号,应该等于LIB_FORMAT_VER。
LPTSTR m_szGuid;
// 对应于本库的唯一GUID串,不能为NULL或空,相同库的所有后续版本此串都应相同。
// 注意此 GUID 文本必须使用专用工具软件(如随本文档附带的guidgen.exe)生成,以防止出现重复。
INT m_nMajorVersion; // 本库的主版本号,必须大于0。
INT m_nMinorVersion; // 本库的次版本号。
INT m_nBuildNumber;
// 构建版本号。
// 本版本号仅用作区分相同正式版本号的系统软件(譬如仅仅修改了几个 BUG,
// 不值得升级正式版本的系统软件)。任何公布过给用户使用的版本其构建版本
// 号都应该不一样。
// 赋值时应该顺序递增。
INT m_nRqSysMajorVer; // 所需要易语言系统的主版本号,目前应该为 3 。
INT m_nRqSysMinorVer; // 所需要易语言系统的次版本号,目前应该为 0 。
INT m_nRqSysKrnlLibMajorVer; // 所需要的系统核心支持库的主版本号,目前应该为 3 。
INT m_nRqSysKrnlLibMinorVer; // 所需要的系统核心支持库的次版本号,目前应该为 0 。
LPTSTR m_szName; // 库名,不能为NULL或空。
// 语言类别宏
#define LT_CHINESE 1
#define LT_ENGLISH 2
INT m_nLanguage; // 本库所支持的语言,目前应该为 LT_CHINESE 。
LPTSTR m_szExplain; // 有关本库的详细解释
#define LBS_FUNC_NO_RUN_CODE (1 << 2)
// 本库仅为声明库,没有对应功能的支持代码,因此不能运行。
#define LBS_NO_EDIT_INFO (1 << 3)
// 本库内无供编辑用的信息,无法被易语言IDE加载。
DWORD m_dwState;
////////////////// 有关本库作者的信息。
LPTSTR m_szAuthor;
LPTSTR m_szZipCode;
LPTSTR m_szAddress;
LPTSTR m_szPhone;
LPTSTR m_szFax;
LPTSTR m_szEmail;
LPTSTR m_szHomePage;
LPTSTR m_szOther;
//////////////////
INT m_nDataTypeCount; // 本库中自定义数据类型的数目,必须等于m_pDataType所指向数组成员的数目。
PLIB_DATA_TYPE_INFO m_pDataType; // 本库中所有自定义数据类型的定义信息。
INT m_nCategoryCount; // 全局命令类别数目,必须等同于下面m_szzCategory成员所实际提供的数目。
LPTSTR m_szzCategory; // 全局命令类别说明表,每项为一字符串,前四位数字表示图象索引号(从1开始,0表示无)。
// 减一后的值为指向支持库中名为"LIB_BITMAP"的BITMAP资源中某一部分16X13位图的索引。
INT m_nCmdCount; // 本库中提供的所有命令(全局命令及对象方法)的数目(如无则为0)。
PCMD_INFO m_pBeginCmdInfo; // 指向所有命令及方法的定义信息数组(如m_nCmdCount为0,则为NULL)。
PFN_EXECUTE_CMD* m_pCmdsFunc; // 指向每个命令的实现代码首地址,(如m_nCmdCount为0,则为NULL)。
PFN_RUN_ADDIN_FN m_pfnRunAddInFn; // 可为NULL,用作为易语言IDE提供附加功能。
// 有关AddIn功能的说明,两个字符串说明一个功能。第一个为功能名称
// (限20字符),第二个为功能详细介绍(限60字符),最后由两个空串结束。
LPTSTR m_szzAddInFnInfo;
PFN_NOTIFY_LIB m_pfnNotify; // 不能为NULL,提供接收来自易语言IDE或运行环境通知信息的函数。
// 超级模板暂时保留不用。
PFN_SUPER_TEMPLATE m_pfnSuperTemplate; // 为NULL
LPTSTR m_szzSuperTemplateInfo; // 为NULL
// 本库定义的所有常量。
INT m_nLibConstCount; // 常量数目。
PLIB_CONST_INFO m_pLibConst; // 指向常量定义数组。
LPTSTR m_szzDependFiles; // 可为NULL
// 本库正常运行所需要依赖的其他文件,在制作安装软件时将会自动带上这些文件。
}
LIB_INFO, *PLIB_INFO;
下面是一个支持库定义信息的例子:
static LIB_INFO s_LibInfo =
{
LIB_FORMAT_VER,
// guid: { 0xd09f2340, 0x8185, 0x11d3, { 0x96, 0xf6, 0xaa, 0xf8, 0x44, 0xc7, 0xe3, 0x25 } }
#define LI_LIB_GUID_STR "d09f2340818511d396f6aaf844c7e325"
_T (LI_LIB_GUID_STR),
3,
0,
33,
3,
0,
3,
0,
_T ("系统核心支持库"),
LT_CHINESE,
_T("本支持库是易语言的核心库,为系统本身和每个易程序提供必需的功能支持"),
0,
_T("飞扬软件工作室吴涛"),
_T("443200"),
_T("湖北省枝江市鑫源村六栋严文芳转"),
_T("(0717)4222233"),
_T("(0717)4222233"),
_T("fly@eyuyan.com"),
_T("http://eyuyan.com"),
_T("祝您一帆风顺,心想事成!"),
sizeof (s_DataType) / sizeof (s_DataType[0]),
s_DataType,
21,
_T("0001流程控制\0"
"0014算术运算\0"
"0005逻辑比较\0"
"0015位运算\0"
"0002容器操作\0"
"0000数组操作\0"
"0000环境存取\0"
"0000拼音处理\0"
"0000文本操作\0"
"0000字节集操作\0"
"0000数值转换\0"
"0000时间操作\0"
"0000磁盘操作\0"
"0000文件读写\0"
"0000系统处理\0"
"0000媒体播放\0"
"0000程序调试\0"
"0000其他\0"
"0021数据库\0"
"0000网络通信\0"
"0000易向导\0"
"\0"),
sizeof (s_CmdInfo) / sizeof (s_CmdInfo [0]),
s_CmdInfo,
s_RunFunc,
NULL,
NULL,
ProcessNotifyLib,
NULL,
NULL,
sizeof (s_ConstInfo) / sizeof (s_ConstInfo [0]),
s_ConstInfo,
NULL
};
/*****************************************************************/
3、以下是 LIB_INFO 中将详细说明的成员:
INT m_nDataTypeCount; // 本库中自定义数据类型的数目,必须等于m_pDataType所指向数组成员的数目。
PLIB_DATA_TYPE_INFO m_pDataType; // 本库中所有的自定义数据类型。
// 本库中提供的所有命令(全局命令及对象方法)的数目(可为0)。
INT m_nCmdCount;
PCMD_INFO m_pBeginCmdInfo; // 可为NULL,指向所有命令及方法的定义数组。
PFN_EXECUTE_CMD* m_pCmdsFunc; // 指向每个命令的实现代码首地址,可为NULL
PFN_RUN_ADDIN_FN m_pfnRunAddInFn; // 可为NULL,用作为易语言IDE提供附加功能。
// 有关AddIn功能的说明,两个字符串说明一个功能。第一个为功能名称
// (限20字符),第二个为功能详细介绍(限60字符),最后由两个空串结束。
LPTSTR m_szzAddInFnInfo;
PFN_NOTIFY_LIB m_pfnNotify; // 不能为NULL,用作提供接收来自易语言IDE或运行环境通知的函数。
// 本库定义的所有常量。
INT m_nLibConstCount; // 常量数目。
PLIB_CONST_INFO m_pLibConst; // 指向常量定义数组。
/*****************************************************************/
4、在说明以上成员之前,需要了解易语言的数据类型及数据存储方式。
数据类型的定义为:
typedef DWORD DATA_TYPE;
其详细说明为:
1、最高两位的值为2表示为系统定义的基本数据类型,定义如下:
#define _SDT_NULL 0 // 空白数据类型
#define _SDT_ALL MAKELONG (MAKEWORD (0, 0), 0x8000) // 通用型
/* 仅用于支持库命令定义其参数或返回值的数据类型,当用于定义库命令参数时,
_SDT_ALL可以匹配所有数据类型(数组类型必须符合要求)。*/
#define SDT_BYTE MAKELONG (MAKEWORD (1, 1), 0x8000) // 字节
#define SDT_SHORT MAKELONG (MAKEWORD (1, 2), 0x8000) // 短整数
#define SDT_INT MAKELONG (MAKEWORD (1, 3), 0x8000) // 整数
#define SDT_INT64 MAKELONG (MAKEWORD (1, 4), 0x8000) // 长整数
#define SDT_FLOAT MAKELONG (MAKEWORD (1, 5), 0x8000) // 小数
#define SDT_DOUBLE MAKELONG (MAKEWORD (1, 6), 0x8000) // 双精度小数
#define SDT_BOOL MAKELONG (MAKEWORD (2, 0), 0x8000) // 逻辑
#define SDT_DATE_TIME MAKELONG (MAKEWORD (3, 0), 0x8000) // 日期时间
#define SDT_TEXT MAKELONG (MAKEWORD (4, 0), 0x8000) // 文本
#define SDT_BIN MAKELONG (MAKEWORD (5, 0), 0x8000) // 字节集
#define SDT_SUB_PTR MAKELONG (MAKEWORD (6, 0), 0x8000) // 记录用户易语言子程序的代码地址
2、最高两位为0时表明此数据类型为在支持库中定义的数据类型,此时HIWORD的其余14位
记录该支持库在易程序中的记录索引,LOWORD为此数据类型在该支持库自定义类型定义信
息数组中的索引值+1。
由于无法确定其他支持库在某易程序中的记录索引,所以支持库无法引用其他支
持库中所定义的数据类型(除开系统核心支持库)。
系统核心支持库的记录索引始终为1,所以任何支持库都可以引用系统核心支持
库中所定义的数据类型。
为了使用本支持库中所定义的数据类型,可以设定记录索引值为0,比如MAKELONG (1, 0)
即可用作引用本支持库中定义的第一个数据类型。
附:以下为目前3.0版本系统核心支持库中数据类型列表。
#define DTP_WIN_FORM MAKELONG (1, 1)
#define DTP_MENU MAKELONG (3, 1)
#define DTP_FONT MAKELONG (4, 1)
#define DTP_EDIT MAKELONG (5, 1)
#define DTP_PIC_BOX MAKELONG (6, 1)
#define DTP_SHAPE_BOX MAKELONG (7, 1)
#define DTP_DRAW_PANEL MAKELONG (8, 1)
#define DTP_GROUP_BOX MAKELONG (9, 1)
#define DTP_LABEL MAKELONG (10, 1)
#define DTP_BUTTON MAKELONG (11, 1)
#define DTP_CHECK_BOX MAKELONG (12, 1)
#define DTP_RADIO_BOX MAKELONG (13, 1)
#define DTP_COMBO_BOX MAKELONG (14, 1)
#define DTP_LIST_BOX MAKELONG (15, 1)
#define DTP_CHKLIST_BOX MAKELONG (16, 1)
#define DTP_HSCROLL_BAR MAKELONG (17, 1)
#define DTP_VSCROLL_BAR MAKELONG (18, 1)
#define DTP_PROCESS_BAR MAKELONG (19, 1)
#define DTP_SLIDER_BAR MAKELONG (20, 1)
#define DTP_TAB MAKELONG (21, 1)
#define DTP_ANIMATE MAKELONG (22, 1)
#define DTP_DATE_TIME_PICKER MAKELONG (23, 1)
#define DTP_MONTH_CALENDAR MAKELONG (24, 1)
#define DTP_DRIVER_BOX MAKELONG (25, 1)
#define DTP_DIR_BOX MAKELONG (26, 1)
#define DTP_FILE_BOX MAKELONG (27, 1)
#define DTP_COLOR_PICKER MAKELONG (28, 1)
#define DTP_HYPER_LINKER MAKELONG (29, 1)
#define DTP_SPIN MAKELONG (30, 1)
#define DTP_COMMON_DLG MAKELONG (31, 1)
#define DTP_TIMER MAKELONG (32, 1)
#define DTP_PRINTER MAKELONG (33, 1)
#define DTP_FIELD_INF MAKELONG (34, 1)
#define DTP_HTML_VIEWER MAKELONG (35, 1)
#define DTP_UDP MAKELONG (36, 1)
#define DTP_SOCK_CLIENT MAKELONG (37, 1)
#define DTP_SOCK_SERVER MAKELONG (38, 1)
#define DTP_SERIAL_PORT MAKELONG (39, 1)
#define DTP_PRINT_INF MAKELONG (40, 1)
#define DTP_GRID MAKELONG (41, 1)
#define DTP_DATA_SOURCE MAKELONG (42, 1)
#define DTP_NPROVIDER MAKELONG (43, 1)
#define DTP_DBPROVIDER MAKELONG (44, 1)
#define DTP_RGN_BUTTON MAKELONG (45, 1)
#define DTP_ODBC_DB MAKELONG (46, 1)
#define DTP_ODBCPROVIDER MAKELONG (47, 1)
3、数据存储方式:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -