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