📄 compiledllapi.bas
字号:
Attribute VB_Name = "mdCmDllAPI"
Option Explicit
' 数学函数动态编译器CCompile类 的 API引入声明
' 复数函数动态编译器CCompileComplex类 的 API引入声明
' 具体使用时,建议使用封装好的CCompile类和CCompileComplex类
' (当然,你也可以调用这些API来达到最快的速度)
' 作者: 侯思松 2003.3.28-29 HouSisong@263.net
'=====================================================================================
'CCompile类API VB 声明
'错误号定义
Public Const csTCompile_NoError = 0 ' '没有发现错误!
Public Const csTCompile_NoKnownError = 1 ' '不知道的错误!
Public Const csTCompile_NoErrorCode = 2 ' '找不到错误号所对应的错误描述!
Public Const csTCompile_CompileHexCodeError = 3 ' '编译时指令的十六进制代码错误!
Public Const csTCompile_HexMod2_EQ_1_Error = 4 ' '编译时传入指令长度错误!
Public Const csTCompile_PMMarker_Error = 5 ' '编译得到参数名称时发生错误!
Public Const csTCompile_FMMarker_Error = 6 ' '编译得到函数名称时发生错误!
Public Const csTCompile_Wording_Error = 7 ' '语法发生错误!
Public Const csTCompile_Bracket_Error = 8 ' '语法错误,在 ( ) 处!
Public Const csTCompile_Optimize_Error = 9 ' '编译优化时发生错误!
Public Const csTCompile_Define_Error = 10 ' '函数编译错误(或超出定义域)!
Public Const csTCompile_Handwriting_Error = 11 ' '函数书写格式错误!
Public Const csTCompile_FFHandwriting_Error = 12 ' '积分函数书写格式错误!
Public Const csTCompile_ReadFloat_Error = 13 ' '编译读取常数数字时发生错误!
Public Const csTCompile_ReadMarker_Error = 14 ' '编译读取标识符时发生错误!
Public Const csTCompile_Read_Error = 15 ' '语法错误,有不识别的字符!
Public Const csTCompile_Note_Match_Error = 16 ' '注释符号不匹配! { } 或 /* */
Public Const csTCompile_FPList_Error = 17 ' '参数列表错误!
Public Const csTCompile_IFHandwriting_Error = 18 ' 'If函数书写格式错误!
'创建编译类,成功返回编译类句柄,失败返回0, 不用时调用cm_CloseTCmHandle关闭句柄
'其它函数需要传递该值作为第一个参数
Public Declare Function cm_CreateTCompile Lib "CompileDll.dll" () As Long
'关闭编译类句柄,释放空间
Public Declare Function cm_CloseTCmHandle Lib "CompileDll.dll" (ByVal hcm As Long) As Boolean
' 调用函数返回表达式的值(实参数值列表), '等价于 cm_SetFunctionParameter + cm_GetValue
Public Declare Function VB_cm_GetFunctionValue Lib "CompileDll.dll" (ByVal hcm As Long, ByRef PList As Double) As Double ' (编译后才能调用)
' 调用函数返回表达式的值,
Public Declare Function VB_cm_GetValue Lib "CompileDll.dll" (ByVal hcm As Long) As Double '(编译后才能调用)
' 按当前设置的参数表传入参数值(实参数值列表)
Public Declare Sub VB_cm_SetFunctionParameter Lib "CompileDll.dll" (ByVal hcm As Long, ByRef PList As Double) ' (编译前后都能调用)
' 设置需要编译的字符串(要编译的字符串,虚参数列表字符串,是否自动编译),
' 比如 Value ='Sqr(x)+Sqr(y)', ParameterList ='x,y' ,
Public Declare Function cm_SetText Lib "CompileDll.dll" (ByVal hcm As Long, ByVal TextValue As String, _
ByVal ParameterList As String, ByVal IfCompile As Boolean) As Boolean '(编译前调用,这是最先要做的)
' 编译当前字符串
Public Declare Function cm_Compile Lib "CompileDll.dll" (ByVal hcm As Long) As Boolean
' 测试是否使用了未定义的变量
Public Declare Function cm_IfHaveUnDefineParameter Lib "CompileDll.dll" (ByVal hcm As Long) As Boolean '(编译后才能调用)
'设置一个外部变量(外部变量名称,外部变量地址), 这样就可以和高级语言或另一个编译类共享变量了
'Public Declare Function cm_SetExteriorParameter Lib "CompileDll.dll" (ByVal hcm As Long, ByVal PName As String, ByVal PAddress As long) As Boolean
'(编译前调用,如果是在编译后,需要调用cm_RefreshExeAddressCodeInPointer刷新地址)
'VB不支持10字节浮点数,所以编译类不能和VB环境共享变量,这里只能和另一个编译类共享变量
Public Declare Function cm_SetExteriorParameter Lib "CompileDll.dll" (ByVal hcm As Long, ByVal PName As String, ByVal PAddress As Long) As Boolean
'(编译前调用,如果是在编译后,需要调用cm_RefreshExeAddressCodeInPointer刷新地址)
' 设置外部数组(数组名称,数组地址), ////'VB不支持10字节浮点数,所以该功能提供不了
'Public Declare Function cm_SetExteriorArrayParameter Lib "CompileDll.dll" (ByVal hcm As Long, ByVal ArrayPName As string, ByVal ArrayPAddress As long) As Boolean
'(编译前调用,如果是在编译后,需要调用cm_RefreshExeAddressCodeInPointer刷新地址)
'刷新变更地址 '(设置完所有的外部变量以后需要调用一次该函数)
Public Declare Sub cm_RefreshExeAddressCodeInPointer Lib "CompileDll.dll" (ByVal hcm As Long)
' 处理预定义宏(要代换的标识符,代换为的描述字符串), ' 可以用来处理常数,甚至定义新的函数!
' 如 Key as ='a', Value as ='-0.5' , 或 Key as ='f(x,y)',Value as ='Max(x,Sin(y))' 等,
Public Declare Function cm_Define Lib "CompileDll.dll" (ByVal hcm As Long, ByVal Key As String, Value As String) As Boolean '(编译前调用)
' 处理常数定义(要代换的标识符,代换的值) ' 常数定义, Value必须是一个可计算的值
' 如 Key as ='a', Value as ='2' , 或 Key as ='b' , Value as ='2*sin(PI/2)' 等,
' 该功能完全可以用预定义宏(Define)来代替,
' 但当值为常数时这样处理有可能使最后得到的编译函数速度更快,并加快编译速度
Public Declare Function cm_DefineConst Lib "CompileDll.dll" (ByVal hcm As Long, ByVal Key, Value As String) As Boolean '(编译前调用)
'根据参数名称PName得到参数地址值
Public Declare Function cm_GetParameterAddress Lib "CompileDll.dll" (ByVal hcm As Long, ByVal PName As String) As Long
'按参数名称PName设置参数值dValue
Public Declare Function VB_cm_SetParameterN Lib "CompileDll.dll" (ByVal hcm As Long, ByVal PName As String, ByVal dValue As Double) As Boolean
'按参数地址PAddress设置参数值dValue
Public Declare Sub VB_cm_SetParameterA Lib "CompileDll.dll" (ByVal hcm As Long, ByVal PAddress As Long, ByVal dValue As Double)
'得到参数PName的值
Public Declare Function VB_cm_GetParameterValueN Lib "CompileDll.dll" (ByVal hcm As Long, ByVal PName As String) As Double
'按地址得到参数的值
Public Declare Function VB_cm_GetParameterValueA Lib "CompileDll.dll" (ByVal PAddress As Long) As Double
'得到参数的总数目(不包括常数)
Public Declare Function cm_GetUserParameterCount Lib "CompileDll.dll" (ByVal hcm As Long) As Long
'通过PList返回参数列表(不包括常数)
'Public Declare Sub cm_GetUserParameterList Lib "CompileDll.dll" (ByVal hcm As Long, ByRef PList As cm_TUserParameterList)
'测试参数PName是否已经存在
Public Declare Function cm_IfHaveParameter Lib "CompileDll.dll" (ByVal hcm As Long, ByVal PName As String) As Boolean
'设置随机函数Rnd()的初始种子值为完全随机种子(系统用当前精确到毫秒的时间设置)
Public Declare Sub cm_SetRandomizeT Lib "CompileDll.dll" (ByVal hcm As Long)
'设置随机函数Random()的初始种子值
Public Declare Sub cm_SetRandomizeI Lib "CompileDll.dll" (ByVal hcm As Long, ByVal RandomSeed As Integer)
Public Declare Sub cm_SetEnabledNote Lib "CompileDll.dll" (ByVal hcm As Long, ByVal Value As Boolean) '是否允许使用注释 (默认false)
Public Declare Sub cm_SetEnabledOptimizeDiv Lib "CompileDll.dll" (ByVal hcm As Long, ByVal Value As Boolean) '是否要优化常数浮点除法运算 (默认true)
Public Declare Sub cm_SetEnabledOptimizeStack Lib "CompileDll.dll" (ByVal hcm As Long, ByVal Value As Boolean) '是否要优化堆栈 (默认true)
Public Declare Sub cm_SetEnabledOptimizeConst Lib "CompileDll.dll" (ByVal hcm As Long, ByVal Value As Boolean) '是否要优化常数运算 (默认true)
Public Declare Function cm_GetVersion Lib "CompileDll.dll" () As Double ' 获得版本号
Public Declare Function cm_GetErrorCode Lib "CompileDll.dll" (ByVal hcm As Long) As Integer '返回错误代码号
Public Declare Function cm_GetExeCodeLength Lib "CompileDll.dll" (ByVal hcm As Long) As Integer '返回编译以后的程序指令区代码长度(字节)
Public Declare Function cm_GetExeParameterLength Lib "CompileDll.dll" (ByVal hcm As Long) As Integer '返回编译以后的程序数据区代码长度(字节)
'=====================================================================================
''CCompileComplex类API VB 声明
'错误号定义
Const csTCmCx_NoError = 0 ' 没有发现错误!
Const csTCmCx_NoKnownError = 101 ' 不知道的错误!
Const csTCmCx_NoErrorCode = 102 ' 找不到错误号所对应的错误描述!
Const csTCmCx_CompileHexCodeError = 103 ' 编译时指令的十六进制代码错误!
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -