📄 compiledllapi.bas
字号:
Const csTCmCx_HexMod2_EQ_1_Error = 104 ' 编译时传入指令长度错误!
Const csTCmCx_PMMarker_Error = 105 ' 编译得到参数名称时发生错误!
Const csTCmCx_FMMarker_Error = 106 ' 编译得到函数名称时发生错误!
Const csTCmCx_Wording_Error = 107 ' 语法发生错误!
Const csTCmCx_Bracket_Error = 108 ' 语法错误,在 ( ) 处!
Const csTCmCx_Optimize_Error = 109 ' 编译优化时发生错误!
Const csTCmCx_Define_Error = 110 ' 函数编译错误(或超出定义域)!
Const csTCmCx_Handwriting_Error = 111 ' 函数书写格式错误!
Const csTCmCx_ReadFloat_Error = 113 ' 编译读取常数数字时发生错误!
Const csTCmCx_ReadMarker_Error = 114 ' 编译读取标识符时发生错误!
Const csTCmCx_Read_Error = 115 ' 语法错误,有不识别的字符!
Const csTCmCx_Note_Match_Error = 116 ' 注释符号不匹配! { } 或 /* */
Const csTCmCx_FPList_Error = 117 ' 参数列表错误!
Const csTCmCx_IFHandwriting_Error = 118 ' If函数书写格式错误!
'创建编译类,成功返回编译类句柄,失败返回0, 不用时调用cmcx_CloseTCmHandle关闭句柄
'其它函数需要传递该值作为第一个参数
Public Declare Function cmcx_CreateTCompileComplex Lib "CompileDll.dll" () As Long
'关闭编译类句柄,释放空间
Public Declare Function cmcx_CloseTCmcxHandle Lib "CompileDll.dll" (ByVal hcmcx As Long) As Boolean
' 调用函数返回表达式的值(实参数值列表), '等价于 cmcx_SetFunctionParameter + cmcx_GetValue
Public Declare Sub VB_cmcx_GetFunctionValue Lib "CompileDll.dll" (ByVal hcmcx As Long, ByRef PList As Double, ByRef pComplexReal As Double, ByRef pComplexImag As Double) ' (编译后才能调用)
' 调用函数返回表达式的值,
Public Declare Sub VB_cmcx_GetValue Lib "CompileDll.dll" (ByVal hcmcx As Long, ByRef pComplexReal As Double, ByRef pComplexImag As Double) '(编译后才能调用)
' 按当前设置的参数表传入参数值(实参数值列表)
Public Declare Sub VB_cmcx_SetFunctionParameter Lib "CompileDll.dll" (ByVal hcmcx As Long, ByRef PList As Double) ' (编译前后都能调用)
' 设置需要编译的字符串(要编译的字符串,虚参数列表字符串,是否自动编译),
' 比如 as Value as ='Sqr(x)+Sqr(y)', ParameterList as ='x,y' ,
Public Declare Function cmcx_SetText Lib "CompileDll.dll" (ByVal hcmcx As Long, ByVal TextValue As String, _
ByVal ParameterList As String, ByVal IfCompile As Boolean) As Boolean '(编译前调用,这是最先要做的)
' 编译当前字符串
Public Declare Function cmcx_Compile Lib "CompileDll.dll" (ByVal hcmcx As Long) As Boolean
' 测试是否使用了未定义的变量
Public Declare Function cmcx_IfHaveUnDefineParameter Lib "CompileDll.dll" (ByVal hcmcx As Long) As Boolean '(编译后才能调用)
'设置一个外部变量(外部变量名称,外部变量地址), 这样就可以和高级语言或另一个编译类共享变量了
'Public Declare Function cmcx_SetExteriorParameter Lib "CompileDll.dll" (ByVal hcmcx As Long, ByVal PName As string, ByVal PAddress As long) As Boolean
'(编译前调用,如果是在编译后,需要调用cmcx_RefreshExeAddressCodeInPointer刷新地址)
'VB不支持10字节浮点数,所以编译类不能和VB环境共享变量,这里只能和另一个编译类共享变量
Public Declare Function cmcx_SetExteriorParameter Lib "CompileDll.dll" (ByVal hcmcx As Long, ByVal PName As String, ByVal PAddress As Long) As Boolean
'(编译前调用,如果是在编译后,需要调用cmcx_RefreshExeAddressCodeInPointer刷新地址)
' 设置外部数组(数组名称,数组地址),
'Public Declare Function cmcx_SetExteriorArrayParameter Lib "CompileDll.dll" (ByVal hcmcx As Long, ByVal ArrayPName As string, ByVal ArrayPAddress As long) As Boolean
'(编译前调用,如果是在编译后,需要调用cmcx_RefreshExeAddressCodeInPointer刷新地址)
'刷新变更地址 '(设置完所有的外部变量以后需要调用一次该函数)
Public Declare Sub cmcx_RefreshExeAddressCodeInPointer Lib "CompileDll.dll" (ByVal hcmcx As Long)
' 处理预定义宏(要代换的标识符,代换为的描述字符串), ' 可以用来处理常数,甚至定义新的函数!
' 如 Key as ='a', Value as ='-0.5' , 或 Key as ='f(x,y)',Value as ='Max(x,Sin(y))' 等,
Public Declare Function cmcx_Define Lib "CompileDll.dll" (ByVal hcmcx 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 cmcx_DefineConst Lib "CompileDll.dll" (ByVal hcmcx As Long, ByVal Key, Value As String) As Boolean '(编译前调用)
'根据参数名称PName得到参数地址值
Public Declare Function cmcx_GetParameterAddress Lib "CompileDll.dll" (ByVal hcmcx As Long, ByVal PName As String) As Long
'按参数名称PName设置参数值dValue
Public Declare Function VB_cmcx_SetParameterN Lib "CompileDll.dll" (ByVal hcmcx As Long, ByVal PName As String, ByVal ComplexReal As Double, ByVal ComplexImag As Double) As Boolean
'按参数地址PAddress设置参数值dValue
Public Declare Sub VB_cmcx_SetParameterA Lib "CompileDll.dll" (ByVal hcmcx As Long, ByVal PAddress As Long, ByVal ComplexReal As Double, ByVal ComplexImag As Double)
'得到参数PName的值
Public Declare Sub VB_cmcx_GetParameterValueN Lib "CompileDll.dll" (ByVal hcmcx As Long, ByVal PName As String, ByRef pComplexReal As Double, ByRef pComplexImag As Double)
'按地址得到参数的值
Public Declare Sub VB_cmcx_GetParameterValueA Lib "CompileDll.dll" (ByVal PAddress As Long, ByRef pComplexReal As Double, ByRef pComplexImag As Double)
'得到参数的总数目(不包括常数)
Public Declare Function cmcx_GetUserParameterCount Lib "CompileDll.dll" (ByVal hcmcx As Long) As Long
'通过PList返回参数列表(不包括常数)
'Public Declare Sub cmcx_GetUserParameterList Lib "CompileDll.dll" (ByVal hcmcx As Long, ByRef PList As cmcx_TUserParameterList)
'测试参数PName是否已经存在
Public Declare Function cmcx_IfHaveParameter Lib "CompileDll.dll" (ByVal hcmcx As Long, ByVal PName As String) As Boolean
'设置随机函数Rnd()的初始种子值为完全随机种子(系统用当前精确到毫秒的时间设置)
Public Declare Sub cmcx_SetRandomizeT Lib "CompileDll.dll" (ByVal hcmcx As Long)
'设置随机函数Random()的初始种子值
Public Declare Sub cmcx_SetRandomizeI Lib "CompileDll.dll" (ByVal hcmcx As Long, ByVal RandomSeed As Integer)
Public Declare Sub cmcx_SetEnabledNote Lib "CompileDll.dll" (ByVal hcmcx As Long, ByVal Value As Boolean) '是否允许使用注释 (默认false)
Public Declare Sub cmcx_SetEnabledOptimizeDiv Lib "CompileDll.dll" (ByVal hcmcx As Long, ByVal Value As Boolean) '是否要优化常数浮点除法运算 (默认true)
Public Declare Sub cmcx_SetEnabledOptimizeStack Lib "CompileDll.dll" (ByVal hcmcx As Long, ByVal Value As Boolean) '是否要优化堆栈 (默认true)
Public Declare Sub cmcx_SetEnabledOptimizeConst Lib "CompileDll.dll" (ByVal hcmcx As Long, ByVal Value As Boolean) '是否要优化常数运算 (默认true)
Public Declare Function cmcx_GetVersion Lib "CompileDll.dll" () As Double ' 获得版本号
Public Declare Function cmcx_GetErrorCode Lib "CompileDll.dll" (ByVal hcmcx As Long) As Integer '返回错误代码号
Public Declare Function cmcx_GetExeCodeLength Lib "CompileDll.dll" (ByVal hcmcx As Long) As Integer '返回编译以后的程序指令区代码长度(字节)
Public Declare Function cmcx_GetExeParameterLength Lib "CompileDll.dll" (ByVal hcmcx As Long) As Integer '返回编译以后的程序数据区代码长度(字节)
'////////////////////////////////////
' 几个工具函数,可以单独调用
'获取当前CPU周期计数(CPU周期数)
Public Declare Function VB_GetCPUCount Lib "CompileDll.dll" () As Double
'把复数转化为字符串表示
Public Declare Sub VB_cmcx_ComplexToStr Lib "CompileDll.dll" (ByVal ComplexReal As Double, ByVal ComplexImag As Double, ByVal strBuffer As String, ByVal nBufLen As Long)
'把字符串转化为复数
Public Declare Function VB_cmcx_StrToComplex Lib "CompileDll.dll" (ByVal strValue As String, ByRef pComplexReal As Double, ByRef pComplexImag As Double) As Boolean
'同时计算出Sin(x)和Cos(x),而时间相当于调用一次Sin(或Cos)函数的时间
'为了复数函数库的独立性,库中的SinCos函数实现没有调用这个API函数
Public Declare Sub VB_SinCos Lib "CompileDll.dll" (ByVal x As Double, ByRef xSin As Double, ByRef xCos As Double)
'函数VB_Ceil:向正无穷大取整
'注VB中: Int:向负无穷大取整,Fix:截断(向0)取整,Round:四舍五入
Public Declare Function VB_Ceil Lib "CompileDll.dll" (ByVal x As Double) As Double
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -