⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tech.txt

📁 中文编程语言——易语言(可视化编程
💻 TXT
📖 第 1 页 / 共 5 页
字号:

/*
    版权声明:
    本文件及其中所有实例的版权均为易语言作者吴涛所有,仅授权给第三方用作开发易语言支持库,禁止用于其他任何场合。
*/


制作易语言支持库的详细步骤及方法说明:

/*****************************************************************/

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 + -