下你所需,载你所想!
汇集开发技术源码资料

玩游戏必备的易语言宏插件源代码

:64.479KB :1 :2019-12-24 08:17:18

部分简介

宏插件导出函数名为:“MacroProcessor”,返回值是ErrorCode,即错误信息。(如果没有错误信息就返回NULL, 用字符(0)即可)
宏插件中数据类型均为“IMM_VALUE_WITH_DATA_TYPE”
下面是对于“IMM_VALUE_WITH_DATA_TYPE”部分介绍

我首先想到的当然是内联,于是就把汇编编译器搬了进去(下面是部分命令实现过程)
当然了,还可以进行编码转换处理,比如说进行编译前编码Ansi(当然宏只能处理常量),那么,程序的执行效率理论上会提高(执行命令时不必再次走一下编码过程)

ASM文件夹请放在e的主目录!!!(和汇编插件类似,“需要FASM.DLL支持”)

编译出的“Coding_plugin.dll”请放在“\e\plugins”目录下,这样e系统才会编译宏。

' !!!如果没有错误信息就返回NULL, 用字符(0)即可
' !!!下面这句代码可以省略
l_szErrorMsg = 字符 (0)
' !!!参数处理
重定义数组 (l_FirstArgInfo_, 假, p_nNumImmArgs)
Copy_IMM_VALUE_WITH_DATA_TYPE (l_FirstArgInfo_, p_apImmArgs, p_nNumImmArgs × 16)
SetIsAry (p_pProcessResult, l_FirstArgInfo_ [1].m_blIsAry)
.如果真 (p_nNumImmArgs = 1)
l_szErrorMsg = “参数不足!本宏至少需要提供2个参数!”
返回 (l_szErrorMsg)
.如果真结束
.如果 (l_FirstArgInfo_ [1].m_blIsAry = 假)
' !!!接下来处理不为数组的情况
.判断开始 (l_FirstArgInfo_ [1].m_dtDataType = #MDT_TEXT) ' 文本型
.如果真 (到小写 (指针到文本 (l_FirstArgInfo_ [1].m_imm)) = “asm”)
.如果真 (l_FirstArgInfo_ [2].m_dtDataType = #MDT_TEXT)
.计次循环首 (p_nNumImmArgs - 1, l_x)
.如果真 (l_FirstArgInfo_ [1 + l_x].m_dtDataType ≠ #MDT_TEXT)
l_szErrorMsg = “参数错误!Asm内联汇编命令剩余参数必须是文本汇编!!”
返回 (l_szErrorMsg)
.如果真结束
l_code = l_code + 到字节集 (#换行符) + 到字节集 (指针到文本 (l_FirstArgInfo_ [1 + l_x].m_imm))
.计次循环尾 ()
l_errorline = FASM._编译 (取字节集指针 (l_code), 取字节集长度 (l_code), l_MachineCode)
.如果真 (l_errorline ≠ -1)
l_error_code = 分割字节集 (l_code, 到字节集 (#换行符), )
l_szErrorMsg = #换行符 + “警告!FASM引擎编译时出错!” + #换行符 + “错误行号:” + 到文本 (l_errorline) + #换行符 + “错误命令:” + 到文本 (l_error_code [l_errorline]) + #换行符 + “详细信息:” + FASM.GetErrorText () + #换行符
返回 (l_szErrorMsg)
.如果真结束
SetDataType (p_pProcessResult, #MDT_BIN) ' 设置返回值类型
SetImmValueBin (p_pProcessResult, l_MachineCode) ' 设置返回值
.如果真结束

.如果真结束
.如果真 (指针到文本 (l_FirstArgInfo_ [1].m_imm) = “URLEncode”)
.如果真 (l_FirstArgInfo_ [2].m_dtDataType ≠ #MDT_TEXT)
l_szErrorMsg = “参数错误!URLEncode命令第二参数必须是文本!”
返回 (l_szErrorMsg)
.如果真结束
SetDataType (p_pProcessResult, #MDT_TEXT)
SetImmValueText (p_pProcessResult, SKURLEncode (到字节集 (指针到文本 (l_FirstArgInfo_ [2].m_imm))))
.如果真结束
.如果真 (指针到文本 (l_FirstArgInfo_ [1].m_imm) = “URLDecode”)
.如果真 (l_FirstArgInfo_ [2].m_dtDataType ≠ #MDT_TEXT)
l_szErrorMsg = “参数错误!URLEncode命令第二参数必须是文本!”
返回 (l_szErrorMsg)
.如果真结束
SetDataType (p_pProcessResult, #MDT_TEXT)
SetImmValueText (p_pProcessResult, 到文本 (SKURLDecode (到字节集 (指针到文本 (l_FirstArgInfo_ [2].m_imm)))))
.如果真结束

.默认
l_szErrorMsg = “警告!本插件首参数必须为文本型!首参数控制程序执行的命令!”
.判断结束

.否则
' !!!然后呢说下数组的
' !!!因为宏参数数组和易语言运行时的数组有所区别
' !!!我跟了下, 宏参数没有维数
' !!!运行时的变量有维数
' !!!所以暂时还没写
' !!!有心人士先写下吧
' !!!我先游戏去了~~~~
l_NumElements = GetNumElements (l_FirstArgPointer_First)
l_szErrorMsg = “Sorry,本宏暂时没法处理数组数据!”
.如果结束
返回 (l_szErrorMsg)

玩游戏必备的易语言宏插件源代码

热门推荐

相关文章