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