📄 elibtypes.pas
字号:
//////////////////////////////////////////////////////////////////////////////
// “库常量”数据结构 Lib_Const_Info
pLIB_CONST_INFO =^LIB_CONST_INFO;
LIB_CONST_INFO = record
m_szName : PChar; // 常量名称
m_szEGName : PChar; // 常量英文名称,可以为空或nil
m_szExplain : PChar; // 详细解释
m_shtReserved : Smallint; // 必须为 1 。
m_shtType : Smallint; // 常量类型,取值为CT_NULL(0),CT_NUM(1),CT_BOOL(2),CT_TEXT(3)之一,见下面的说明和常量定义
m_szText : PChar; // 文本(当m_shtType取值为CT_TEXT时)
m_dbValue : double; // 数值(当m_shtType取值为CT_NUM、CT_BOOL时)
////////////////////////////////////////////////////////////////////////////
// 其中,m_shtType 可以取以下常量值之一:
// CT_NULL = 0; // 空值
// CT_NUM = 1; // 数值型,如: 3.14159
// CT_BOOL = 2; // 逻辑型,如: 1 ( 1代表'真'; 0代表'假')
// CT_TEXT = 3; // 文本型,如: 'abc'
////////////////////////////////////////////////////////////////////////////
end;
const
//////////////////////////////////////////////////////////////////////////////
// 以下常量在 LIB_CONST_INFO 结构中用到
CT_NULL = 0; // 空值
CT_NUM = 1; // 数值型,如: 3.14159
CT_BOOL = 2; // 逻辑型,如: 1 ( 1代表'真'; 0代表'假')
CT_TEXT = 3; // 文本型,如: 'abc'
//////////////////////////////////////////////////////////////////////////////
type
//////////////////////////////////////////////////////////////////////////////
// 常用数据结构。
// 标识窗口单元
pMUNIT = ^MUNIT;
MUNIT = record
m_dwFormID : LongWord;
m_dwUnitID : Longword;
end;
// 临时结构,仅在MDATA_INF中用于定义m_Value成员
T_MDATA_INF_Data = packed record // Note: packed record, it's important.
case Integer of
// 第一部分。注意:当对应参数具有AS_RECEIVE_VAR或AS_RECEIVE_VAR_ARRAY或AS_RECEIVE_VAR_OR_ARRAY标志定义时将使用下面的第二部分。
0: ( m_byte : Byte); // SDT_BYTE 数据类型的数据,下同。
1: ( m_short : SmallInt); // SDT_SHORT
2: ( m_int : Integer); // SDT_INT
3: ( m_int64 : Int64); // SDT_INT64
4: ( m_float : Single); // SDT_FLOAT
5: ( m_double : Double); // SDT_DOUBLE
6: ( m_date : TDateTime); // SDT_DATE_TIME (在VC中: typedef double DATE; 在Delphi中: type TDateTime = type Double;)
7: ( m_bool : LongBool); // SDT_BOOL (在VC中: typedef int BOOL;)
8: ( m_pText : PChar); // SDT_TEXT,经过系统预处理,即使是空文本,此指针值也不会为nil,以便于处理。指针所指向数据的格式见前面的描述。!!!为了避免修改到常量段(m_pText有可能会指向易程序常量段区域)中的数据,只可读取而不可更改其中的内容,下同。
9: ( m_pBin : ^Byte); //??? LPBYTE; // SDT_BIN,经过系统预处理,即使是空字节集,此指针值也不会为nil,以便于处理。指针所指向数据的格式见前面的描述。!!!只可读取而不可更改其中的内容。
10:( m_dwSubCodeAdr : LongWord); // SDT_SUB_PTR,为子程序代码地址指针。
11:( m_unit : MUNIT); // 窗口单元、菜单数据类型的数据。
12:( m_pCompoundData : Pointer); // 复合数据类型数据指针,指针所指向数据的格式见前面的描述。!!! 只可读取而不可更改其中的内容。
13:( m_pAryData : Pointer); // 数组数据指针,指针所指向数据的格式见前面的描述。注意如果为文本或字节集数组,则成员数据指针可能为NULL。!!! 只可读取而不可更改其中的内容。
// 第二部分。为指向变量地址的指针,仅当参数具有AS_RECEIVE_VAR或AS_RECEIVE_VAR_ARRAY或AS_RECEIVE_VAR_OR_ARRAY标志时才被使用。
14:( m_pByte : ^Byte); // SDT_BYTE 数据类型变量的地址,下同。
15:( m_pShort : ^SmallInt); // SDT_SHORT
16:( m_pInt : ^Integer); // SDT_INT
17:( m_pInt64 : ^Int64); // SDT_INT64
18:( m_pFloat : ^Single); // SDT_FLOAT
19:( m_pDouble : ^Double); // SDT_DOUBLE
20:( m_pDate : ^TDateTime); // SDT_DATE_TIME
21:( m_pBool : ^LongBool); // SDT_BOOL
22:( m_ppText : PPChar); // SDT_TEXT,注意*m_ppText可能为NULL(代表空文本)。写入新值之前必须释放前值,例句:NotifySys (NRS_MFREE, (DWORD)*m_ppText)。!!!不可直接更改*m_ppText所指向的内容,只能释放原指针后设置入NULL(空文本)或使用NRS_MALLOC通知分配的新内存地址指针(下同)。
23:( m_ppBin : ^PByte); // SDT_BIN,注意*m_ppBin可能为NULL(代表空字节集)。写入新值之前必须释放前值,例句:NotifySys (NRS_MFREE, (DWORD)*m_ppBin)。!!!不可直接更改*m_ppBin所指向的内容,只能释放原指针后设置入NULL(空字节集)或新指针。
24:( m_pdwSubCodeAdr : ^LongWord); // SDT_SUB_PTR,子程序代码地址变量地址。
25:( m_pUnit : ^MUNIT); // 窗口单元、菜单数据类型变量地址。
26:( m_ppCompoundData : ^Pointer); // 复合数据类型变量地址。!!!注意写入新值之前必须使用NRS_MFREE通知逐一释放所有成员(即:SDT_TEXT、SDT_BIN及复合数据类型成员)及原地址指针。!!!不可直接更改*m_ppCompoundData所指向的内容,只能释放原指针后设置入新指针。
27:( m_ppAryData : ^Pointer); // 数组数据变量地址,注意: 1、写入新值之前必须释放原值,例句:NotifySys (NRS_FREE_ARY,m_dtDataType, (DWORD)*m_ppAryData),注意:此例句只适用于m_dtDataType为系统基本数据类型时的情况,如果为复合数据类型,必须根据其定义信息逐一释放。2、如果为文本或字节集数组,则其中成员的数据指针可能为NULL。!!!不可直接更改*m_ppAryData所指向的内容,只能释放原指针后设置入新指针。
end;
// MDATA_INF用作记录函数指针pFN_EXECUTE_CMD的返回值和参数信息
pMDATA_INF = ^MDATA_INF;
MDATA_INF = record
m_Value : T_MDATA_INF_Data; // 数据内容
m_dtDataType : DATA_TYPE; // 数据类型,见下面的说明
////////////////////////////////////////////////////////////////////////////
//
// 关于 m_dtDataType 的说明:
//
// 1、当用作传递参数数据时,如果该参数具有AS_RECEIVE_VAR_OR_ARRAY或
// AS_RECEIVE_ALL_TYPE_DATA标志,且为数组数据,则包含标志DT_IS_ARY,
// 这也是DT_IS_ARY标志的唯一使用场合。
// DT_IS_ARY 的定义为:const DT_IS_ARY = $20000000;
// 2、当用作传递参数数据时,如果为空白数据,则为_SDT_NULL。
//
////////////////////////////////////////////////////////////////////////////
end;
ArgArray = array of MDATA_INF; // 通常用于全局命令的实现代码中, 辅助读取参数值。
// !!! ASSERT(sizeof(MDATA_INF)==sizeof(DWORD)*3); 结构MDATA_INF的尺寸必须等于12字节。
//////////////////////////////////////////////////////////////////////////////
// 通知用数据结构。
// 支持库可以通知易编辑环境(IDE)或易运行环境(RUNTIME)的码值:
PMDATA = ^MDATA;
MDATA = record // 初始值:m_pData=nil; m_nDataSize=0;
m_pData : PByte;
m_nDataSize : Integer;
end;
// 记录事件的来源
PEVENT_NOTIFY = ^EVENT_NOTIFY;
EVENT_NOTIFY = class // 记录事件的来源
m_dwFormID : LongWord; // 调用ITF_CREATE_UNIT接口所传递过来的所处窗口ID(dwWinFormID参数)
m_dwUnitID : Longword; // 调用ITF_CREATE_UNIT接口所传递过来的窗口单元ID(dwUnitID参数)
m_nEventIndex : Integer; // 事件索引(在窗口单元定义信息LIB_DATA_TYPE_INFO中m_pPropertyBegin成员中的位置)
m_nArgCount : Integer; // 本事件所传递的参数数目,最多 5 个。
m_nArgValue : array[0..4] of Integer; // 记录各参数值,SDT_BOOL型参数值为 1 或 0。
//!!! 注意下面两个成员在没有定义返回值的事件中无效,其值可能为任意值。
m_blHasReturnValue : LongBool; // 用户事件处理子程序处理完毕事件后是否提供了返回值。
m_nReturnValue : Integer; // 用户事件处理子程序处理完毕事件后的返回值,逻辑值用数值 0(假) 和 1(真) 返回。
procedure EVENT_NOTIFY(dwFormID,dwUnitID : LongWord; nEventIndex:Integer);
end;
const
//////////////////////////////////////////////////////////////////////////////
// 消息常量定义 (消息号)
// NES_ 开头的常量为仅被易编辑环境(IDE)处理的通知(消息号)。[NES: Notify_Editable_System]
NES_GET_MAIN_HWND = 1; // 取易编辑环境主窗口的句柄,可以在支持库的AddIn函数中使用。
NES_RUN_FUNC = 2; // 通知易编辑环境运行指定的功能,返回一个BOOL值。dwParam1为功能号;dwParam2为一个双DWORD数组指针,分别提供功能参数1和2。
// NAS_ 开头的常量为既被易编辑环境又被易运行环境处理的通知(消息号)。[NAS: Notify_All_System]
NAS_GET_LIB_DATA_TYPE_INFO = 1002; //返回指定库定义数据类型的pLIB_DATA_TYPE_INFO定义信息指针。dwParam1为欲获取信息的数据类型DATA_TYPE;如果该数据类型无效或者不为库定义数据类型,则返回nil,否则返回pLIB_DATA_TYPE_INFO指针。
// NRS_ 开头的常量为仅能被易运行环境处理的通知(消息号)。[NRS: Notify_Runtime_System]
NRS_UNIT_DESTROIED = 2000; // 通知系统指定的单元已经被销毁。dwParam1为dwFormID;dwParam2为dwUnitID;
NRS_CONVERT_NUM_TO_INT = 2001; // 转换其它数值格式到整数。dwParam1为pMDATA_INF指针,其m_dtDataType必须为数值型。返回转换后的整数值。
NRS_GET_CMD_LINE_STR = 2002; // 取当前命令行文本,返回命令行文本指针,有可能为空串。
NRS_GET_EXE_PATH_STR = 2003; // 取当前执行文件所处目录名称,返回当前执行文件所处目录文本指针。
NRS_GET_EXE_NAME = 2004; // 取当前执行文件名称,返回当前执行文件名称文本指针。
NRS_GET_UNIT_PTR = 2006; // 取单元对象指针。dwParam1为WinForm的ID;dwParam2为WinUnit的ID。成功返回有效的单元对象CWnd*指针,失败返回nil。
NRS_GET_AND_CHECK_UNIT_PTR = 2007; // 取单元对象指针,并检查该指针。dwParam1为WinForm的ID;dwParam2为WinUnit的ID。成功返回有效的单元对象CWnd*指针,失败自动报告运行时错误并立即退出程序。
NRS_EVENT_NOTIFY = 2008; // 通知系统产生了事件。dwParam1为PEVENT_NOTIFY指针。如果返回0,表示此事件已被系统抛弃,否则表示系统已经成功传递此事件到用户事件处理子程序。
NRS_STOP_PROCESS_EVENT_NOTIFY = 2009; // 通知系统暂停处理事件通知。
NRS_CONTINUE_PROCESS_EVENT_NOTIFY = 2010; // 通知系统继续处理事件通知。
NRS_DO_EVENTS = 2018; // 通知Windows系统处理所有已有事件。
NRS_GET_UNIT_DATA_TYPE = 2022; // 取单元数据类型。dwParam1为WinForm的ID;dwParam2为WinUnit的ID。成功返回有效的DATA_TYPE,失败返回0。
NRS_FREE_ARY = 2023; // 释放指定数组数据。dwParam1为该数据的DATA_TYPE,只能为系统基本数据类型;dwParam2为指向该数组数据的指针。
NRS_MALLOC = 2024; // 分配指定空间的内存,所有与易程序交互的内存都必须使用本通知分配。dwParam1为欲需求内存字节数。dwParam2如为0,则如果分配失败就自动报告运行时错并退出程序,如不为0,则如果分配失败就返回nil。返回所分配内存的首地址。
NRS_MFREE = 2025; // 释放已分配的指定内存。dwParam1为欲释放内存的首地址。
NRS_MREALLOC = 2026; // 重新分配内存。dwParam1为欲重新分配内存尺寸的首地址;dwParam2为欲重新分配的内存字节数。返回所重新分配内存的首地址,失败自动报告运行时错并退出程序。
NRS_RUNTIME_ERR = 2027; // 通知系统已经产生运行时错误。dwParam1为char*指针,说明错误文本。
NRS_EXIT_PROGRAM = 2028; // 通知系统退出用户程序。dwParam1为退出代码,该代码将被返回到操作系统。
NRS_GET_PRG_TYPE = 2030; // 返回当前用户程序的类型,为2(调试版)或3(发布版)。
//////////////////////////////////////////////////////////////////////////////
// 易编辑环境(IDE)或易运行环境(RUNTIME)可以通知支持库的码值(消息号):
NL_SYS_NOTIFY_FUNCTION = 1;
// 告知支持库通知系统用的函数指针,在装载支持库前通知,可能有多次,
// (后通知的值应该覆盖前面所通知的值),忽略返回值。
// 库可将此函数指针记录下来以便在需要时使用它通知信息到系统。
// dwParam1: (PFN_NOTIFY_SYS)
//////////////////////////////////////////////////////////////////////////////
const
NR_OK = 0;
NR_ERR = -1;
type
// 此函数用作易编辑环境(IDE)或易运行环境(RUNTIME)通知支持库有关事件。
pFN_NOTIFY_LIB = function(nMsg:Integer; dwParam1:LongWord=0; dwParam2:LongWord=0) :Integer; stdcall; // 参数dwParam1,dwParam2如果不使用则置0
// 此函数用作库通知易编辑环境(IDE)或易运行环境(RUNTIME)有关事件。
pFN_NOTIFY_SYS = function(nMsg:Integer; dwParam1:LongWord=0; dwParam2:LongWord=0) :Integer; stdcall; // 参数dwParam1,dwParam2如果不使用则置0
//////////////////////////////////////////////////////////////////////////////
// 所有命令和方法实现函数的原型 pFN_EXECUTE_CMD
//
// 说明如下:
// 1、必须是CDECL调用方式;
// 2、pRetData用作返回数据;
// 3、!!!如果指定库命令返回数据类型不为_SDT_ALL,可以
// 不填充 pRetData->m_dtDataType,如果为_SDT_ALL,则必须填写;
// 4、pArgInf提供参数数据本身,所指向的MDATA_INF记录每个输入参数,数目等同于nArgCount。
//////////////////////////////////////////////////////////////////////////////
pFN_EXECUTE_CMD = procedure(pRetData:pMDATA_INF; nArgCount:Integer; pArgInf:pMDATA_INF); cdecl;
// 运行支持库中ADDIN功能的函数
pFN_RUN_ADDIN_FN = function(nAddInFnIndex:Integer) :Integer; stdcall;
// 创建库中提供的超级模板程序的函数
pFN_SUPER_TEMPLATE = function(nTemplateIndex:Integer) :Integer; stdcall;
////////////////////////////////////////////////////
const
LIB_FORMAT_VER = 20000101; // 库格式号。在LIB_INFO结构中使用。
type
(* *************** *)
(********************** LIB_INFO *****************************************)
(* *************** *)
//////////////////////////////////////////////////////////////////////////////
// “支持库信息”数据结构 LIB_INFO
pLIB_INFO = ^LIB_INFO;
LIB_INFO = record
m_dwLibFormatVer : LongWord; // 库格式号,应该等于LIB_FORMAT_VER
m_szGuid : PChar; // 对应于本库的唯一GUID串,不能为NULL或空,相同库的所有后续版本此串都应相同。注意,此GUID字串必须使用专用工具软件生成(在Delphi内,可以通过组合键[Ctrl+Shift+G]生成一个GUID字串),以防止出现重复。
m_nMajorVersion : Integer; // 本库的主版本号,必须大于0
m_nMinorVersion : Integer; // 本库的次版本号
m_nBuildNumber : Integer; // 构建版本号。本版本号仅用作区分相同正式版本号的系统软件(譬如仅仅修改了几个 BUG,不值得升级正式版本的系统软件)。任何公布过给用户使用的版本其构建版本号都应该不一样。赋值时应该顺序递增。
m_nRqSysMajorVer : Integer; // 所需要易语言系统的主版本号,目前应该为 3
m_nRqSysMinorVer : Integer; // 所需要易语言系统的次版本号,目前应该为 0
m_nRqSysKrnlLibMajorVer : Integer; // 所需要的系统核心支持库的主版本号,目前应该为 3
m_nRqSysKrnlLibMinorVer : Integer; // 所需要的系统核心支持库的次版本号,目前应该为 0
m_szName : PChar; // 库名,不能为nil或空
m_nLanguage : Integer; // 本库所支持的语言,目前应该为 LT_CHINESE (=1)。见下面的说明和常量定义。
m_szExplain : PChar; // 有关本库的详细解释
m_dwState : LongWord; // 支持库状态,见以下的说明和常量定义(LBS_FUNC_NO_RUN_CODE(4);LBS_NO_EDIT_INFO(8))
m_szAuthor : PChar; // 作者姓名
m_szZipCode : PChar; // 邮编
m_szAddress : PChar; // 地址
m_szPhone : PChar; // 电话
m_szFax : PChar; // 传真
m_szEmail : PChar; // 电子邮件
m_szHomePage : PChar; // 网站主页
m_szOther : PChar; // 作者其它信息
m_nDataTypeCount : Integer; // 本库中自定义数据类型的数目,必须等于m_pDataType所指向数组成员的数目
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -