📄 unit1.~pas
字号:
unit Unit1;
////////////////////////////////////////////////////////////////////////////////
//
// 要增加一个全局命令,请:
// 1.编写命令的实现函数,原形为pFN_EXECUTE_CMD;
// 2.设置常量CommandsCount值加一;
// 3.在InitImpCommands函数中,初始化数组成员InitImpCommands[CommandsCount-1];
// 4.在InitArgumentsInfo函数中,增加一个CASE(即初始化数组成员ArgumentsInfo[CommandsCount-1][]);
// 5.在InitCommandsInfo函数中,增加一个CASE(即初始化数组成员CommandsInfo[CommandsCount-1]);
// 6.在InitLibInfo函数中,修改库的版本号(本步可省略)。
//
// 要增加一个常量,请:
// 1.在InitConstInfo函数中,增加一个CASE(初始化数组成员ConstsInfo[InitConstInfo-1];
// 2.设置常量ConstsCount值加一;
// 3.在InitLibInfo函数中,修改库的版本号(本步可省略)。
//
////////////////////////////////////////////////////////////////////////////////
interface
uses Windows, elibTypes;
const
CommandsCount = 2; //!!! 命令个数
ConstsCount = 1; //!!! 常量个数(如果为0,请把常量信息数组ConstsInfo的定义行注释掉,同时把函数InitConstInfo中的代码清除)
var
LibInfo : LIB_INFO;
CommandsInfo : array[0..CommandsCount-1] of CMD_INFO; // 命令信息
ArgumentsInfo: array[0..CommandsCount-1] of array of ARG_INFO; // 参数信息
ImpCommands : array[0..CommandsCount-1] of pFN_EXECUTE_CMD; // 命令实现
ConstsInfo : array[0..ConstsCount-1] of LIB_CONST_INFO; // 常量信息
function ProsessNotify (nMsg:Integer; dwParam1:LongWord=0; dwParam2:LongWord=0) :Integer; stdcall;
function AddInFunction (nAddInFnIndex:Integer) :Integer; stdcall;
//----------------------------------------------------------------------------
// 唯一的输出函数 GetNewInf() 的声明
function GetNewInf () : pLIB_INFO; stdcall; export;
//----------------------------------------------------------------------------
// 命令实现函数的声明(所有函数的原形都是相同的,即pFN_EXECUTE_CMD)
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//左移
procedure usrSHL(pRetData:pMDATA_INF; nArgCount:Integer; pArgInf:pMDATA_INF); cdecl;
//右移
procedure usrSHR(pRetData:pMDATA_INF; nArgCount:Integer; pArgInf:pMDATA_INF); cdecl;
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//----------------------------------------------------------------------------
// 内部初始化函数的声明
procedure InitLibInfo; // 初始化库信息
procedure InitCommandsInfo; // 初始化命令信息
procedure InitArgumentsInfo; // 初始化参数信息
procedure InitImpCommands; // 初始化命令实现信息
procedure InitConstInfo; // 初始化常量信息
////////////////////////////////////////////////////////////////////////////////
implementation
//uses Unit2, Unit5;
// 这是本库唯一的输出函数GetNewInf的定义
function GetNewInf () : pLIB_INFO; stdcall; export;
begin
Result:=@LibInfo;
end;
////////////////////////////////////////////////////////////////////////////////
// 初始化库信息
procedure InitLibInfo;
begin
LibInfo.m_dwLibFormatVer:=LIB_FORMAT_VER;
LibInfo.m_szGuid:=PChar('713B2774F7664D27BDD048AA88900FC1'); //Ctrl+Shift+G
LibInfo.m_nMajorVersion:=1; // 主版本号
LibInfo.m_nMinorVersion:=0; // 次版本号
LibInfo.m_nBuildNumber:=0; // 构建版本号
LibInfo.m_nRqSysMajorVer:=3;
LibInfo.m_nRqSysMinorVer:=0;
LibInfo.m_nRqSysKrnlLibMajorVer:=3;
LibInfo.m_nRqSysKrnlLibMinorVer:=0;
LibInfo.m_szName:=PChar('*【移位扩展库】* Roya Onfly'); // 支持库名称
LibInfo.m_nLanguage:=LT_CHINESE;
LibInfo.m_szExplain:=PChar('易语言移位扩展支持库 Build 0414'+#13+#10+
' 诺亚鸿飞软件工作室 吴江涛 '+#13+#10+
'------------------------------------------------------------------------------------------------------------------------'+#13+#10);
LibInfo.m_dwState:=0;
LibInfo.m_szAuthor:=PChar('吴江涛'); // 作者
LibInfo.m_szZipCode:=PChar('330034');
LibInfo.m_szAddress:=PChar('南昌航空工业学院290信箱');
LibInfo.m_szPhone:=PChar('0791-7066853');
LibInfo.m_szFax:=nil;
LibInfo.m_szEmail:=PChar('wujtao@91x.com');
LibInfo.m_szHomePage:=PChar('Http://wujtao.126.com');
LibInfo.m_szOther:=PChar('QQ:51273885(私人) 362666286(工作)'+#13+#10+
'------------------------------------------------------------------------------------------------------------------------'+#13+#10);
LibInfo.m_nDataTypeCount:=0;
LibInfo.m_pDataType:=nil;
LibInfo.m_nCategoryCount:=1;
LibInfo.m_szzCategory:=PChar('0024 逻辑移位'+#0);
LibInfo.m_nCmdCount:=CommandsCount;
LibInfo.m_pBeginCmdInfo:=@CommandsInfo;
LibInfo.m_pCmdsFunc:=@ImpCommands;
LibInfo.m_pfnRunAddInFn:=AddInFunction;
LibInfo.m_szzAddInFnInfo:=PChar('诺亚鸿飞软件工作室'+#0);
LibInfo.m_pfnNotify:=ProsessNotify;
LibInfo.m_pfnSuperTemplate:=nil;
LibInfo.m_szzSuperTemplateInfo:=nil;
LibInfo.m_nLibConstCount:=ConstsCount;
LibInfo.m_pLibConst:=@ConstsInfo;
LibInfo.m_szzDependFiles:=nil;
end;
////////////////////////////////////////////////////////////////////////////////
// 初始化命令信息
procedure InitCommandsInfo;
var i:Integer;
begin
// 采用for+case的结构,可使新增一个命令或常量时,在复制、粘贴之后,尽可能减少修改代码的次数。下同。
for i:=0 to High(CommandsInfo) do case i+1 of
1:// 第一个命令的信息---------------------------------------------------------
with CommandsInfo[i] do begin
m_szName:=PChar('左移');
m_szEGName:=PChar('SHL');
m_szExplain:=PChar('对数进行左移运算.');
m_shtCategory:=1;
m_wState:=0;
m_dtRetType:=SDT_INT;
m_wReserved:=0;
m_shtUserLevel:=LVL_HIGH;
m_shtBitmapIndex:=0;
m_shtBitmapCount:=0;
m_nArgCount:=High(ArgumentsInfo[i])+1;
m_pBeginArgInfo:=pARG_INFO(ArgumentsInfo[i]);
end;
2:// 第二个命令的信息---------------------------------------------------------
with CommandsInfo[i] do begin
m_szName:=PChar('右移');
m_szEGName:=PChar('SHR');
m_szExplain:=PChar('对数进行右移运算.');
m_shtCategory:=1;
m_wState:=0;
m_dtRetType:=SDT_INT;
m_wReserved:=0;
m_shtUserLevel:=LVL_HIGH;
m_shtBitmapIndex:=0;
m_shtBitmapCount:=0;
m_nArgCount:=High(ArgumentsInfo[i])+1;
m_pBeginArgInfo:=pARG_INFO(ArgumentsInfo[i]);
end;
end; // end of case and for
end;
////////////////////////////////////////////////////////////////////////////////
// 初始化参数信息
procedure InitArgumentsInfo;
var i,j,count:Integer;
begin
for i:=0 to High(ArgumentsInfo) do case i+1 of
1://以下是第一个命令的参数信息================================================
begin
count:=2; //!!! 本命令的参数个数
SetLength(ArgumentsInfo[i],count);
for j:=0 to High(ArgumentsInfo[i]) do case j+1 of
1: //第一个参数----------------------------------------------------------
with ArgumentsInfo[i][j] do begin
m_szName:=PChar('源数字');
m_szExplain:=PChar('该数是要进行左移运算的源数字(为整数型,最大长度4字节');
m_shtBitmapIndex:=0;
m_shtBitmapCount:=0;
m_dtDataType:=SDT_INT;
m_nDefault:=0;
m_dwState:=0;
end;
2: //第二个参数----------------------------------------------------------
with ArgumentsInfo[i][j] do begin
m_szName:=PChar('移位数');
m_szExplain:=PChar('该数是要进行左移运算的移位书,不能超过16');
m_shtBitmapIndex:=0;
m_shtBitmapCount:=0;
m_dtDataType:=SDT_INT;
m_nDefault:=1; //默认参数
m_dwState:=AS_HAS_DEFAULT_VALUE; //参数状态,有默认参数
end;
end; // end of case j+1 and for
end; // end of case i+1
2://以下是第二个命令的参数信息================================================
begin
count:=2; //!!! 本命令的参数个数
SetLength(ArgumentsInfo[i],count);
for j:=0 to High(ArgumentsInfo[i]) do case j+1 of
1: //第一个参数----------------------------------------------------------
with ArgumentsInfo[i][j] do begin
m_szName:=PChar('源数字');
m_szExplain:=PChar('该数是要进行右移运算的源数字(为整数型,最大长度4字节');
m_shtBitmapIndex:=0;
m_shtBitmapCount:=0;
m_dtDataType:=SDT_INT;
m_nDefault:=0;
m_dwState:=0;
end;
2: //第二个参数----------------------------------------------------------
with ArgumentsInfo[i][j] do begin
m_szName:=PChar('移位数');
m_szExplain:=PChar('该数是要进行右移运算的移位数,不能超过16');
m_shtBitmapIndex:=0;
m_shtBitmapCount:=0;
m_dtDataType:=SDT_INT;
m_nDefault:=1; //默认参数
m_dwState:=AS_HAS_DEFAULT_VALUE; //参数状态,有默认参数
end;
end; // end of case j+1 and for
end; // end of case i+1
// 在此添加其它命令的参数信息
end; // end of case i+1 and for
end;
////////////////////////////////////////////////////////////////////////////////
// 初始化命令实现信息
// 在这里编写用户自定义的处理函数
procedure InitImpCommands;
begin
ImpCommands[0]:=usrSHL; //左移函数
ImpCommands[1]:=usrSHR; //右移函数
end;
////////////////////////////////////////////////////////////////////////////////
// 初始化常量信息
procedure InitConstInfo;
var i:Integer;
begin
for i:=0 to High(ConstsInfo) do case i+1 of
1://第一个常量----------------------------------------------------------------
with ConstsInfo[i] do begin
m_szName:=PChar('诺亚鸿飞');
m_szEGName:=PChar('Roya');
m_szExplain:=nil;
m_shtReserved:=1;
m_shtType:=CT_TEXT;
m_szText:=PChar('诺亚鸿飞软件工作室 吴江涛');
m_dbValue:=0;
end;
//在此添加其它常量信息
end; // end of case and for
end;
////////////////////////////////////////////////////////////////////////////////
// 接受来自易IDE的通知,目的就是获得向易IDE反馈信息的函数指针g_fnNotifySys(全局变量)
function ProsessNotify (nMsg:Integer; dwParam1:LongWord=0; dwParam2:LongWord=0) :Integer; stdcall;
var ReturnValue: Integer;
begin
ReturnValue:=NR_OK;
case nMsg of
NL_SYS_NOTIFY_FUNCTION:
g_fnNotifySys:=pFN_NOTIFY_SYS(dwParam1);
else ReturnValue:=NR_ERR;
end;
Result:=ReturnValue;
end;
////////////////////////////////////////////////////////////////////////////////
// 附加功能实现函数的定义(代码实现)
function AddInFunction (nAddInFnIndex:Integer) :Integer; stdcall;
begin
(*
AboutMe(nil,0,nil);
*)
MessageBox(0,pchar(nAddInFnIndex),'E-IDE Notify',MB_OK);
Result:=0;
end;
////////////////////////////////////////////////////////////////////////////////
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
// 命令实现函数的定义(代码实现)
// 在函数中可通过ArgArray(pArgInf)[i].m_Value读取易传过来的第i个参数(i从0开始,0表示第一个参数)
procedure usrSHL (pRetData:pMDATA_INF; nArgCount:Integer; pArgInf:pMDATA_INF); cdecl;
begin
//左移实现过程
pRetData.m_Value.m_int:=ArgArray(pArgInf)[0].m_Value.m_int SHL ArgArray(pArgInf)[1].m_Value.m_int;
end;
procedure usrSHR (pRetData:pMDATA_INF; nArgCount:Integer; pArgInf:pMDATA_INF); cdecl;
begin
//右移实现过程
pRetData.m_Value.m_int:=ArgArray(pArgInf)[0].m_Value.m_int SHR ArgArray(pArgInf)[1].m_Value.m_int;
end;
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
////////////////////////////////////////////////////////////////////////////////
initialization
//////////////////////////////////////////////////////////////////////////////
// 初始化支持库信息,以下函数的调用顺序不可轻易变动
InitArgumentsInfo;
InitCommandsInfo;
InitImpCommands;
InitConstInfo;
InitLibInfo;
//////////////////////////////////////////////////////////////////////////////
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -