AtScript 是一个类似于 JavaScript 的面象对象脚本语言,无需组件环境 , 只要倒入一个 500 多 K 的 Lib 就可以使用该引擎, . 如果您已了解 JaavaScript ,就会很快熟悉 AtScript 。即使您没有学过 JavaScript ,也有很多快的使用 AtScript 语言进行程序设计。
例 1 :
function void Main()
{
var int a;
for( a = 2 ; a < 6 ; a++ )
MessageBox(a);
MessageBox("end");
}
例 2 :
function void Main()
{
var string a;
a = "red";
switch( a )
{
case "red":
MessageBox( "red" );
break;
case "green"
MessageBox("green");
break;
default:
MessageBox("other");
break;
}
}
例 3 :
function void Main()
{
MessageBox( add( 3,4 ) );
}
function int add( int x , int y )
{
return x +y;
}
1. 变量
变量在系统主要分为以下 3 种
a. 数据变量 ( int , string , double , bool ), 如果不定义类型,则为变体,在内存中以 string 进行存放
b. 变量集 CValueSet (里面的子变量都是变体)
c. 对象 AtsObject
定义变量都要加上 var : 如: var string a;
function
函数的定义使用 function 来进行定义,如:
function int add( int x , int y )
{
return x +y;
}
2. Other
功能:为 AtScript 的引擎 , 负责脚本的执行
AtString 中的用户对象 , 但对象在类型要事先在 CAtsEngine 中进行声明 , 如 : 只有在 CAtsEngine.AddObjIns( "MyObj" , pNewObj ); 后,才可以使用。
参考 《 AtScript.chm 》
使用 Var 进行申明
如 Var string myvar;
Var int myvar;
在变量集中可以存放多个变量
如 : Var CValueSet myvar;
if (condition)
statement1
else
statement2
例 :
var int a;
for( a = 2 ; a < 6 ; a++ )
MessageBox(a);
例 :
var int a;
a = 1;
while( a < 5 )
{
MessageBox( a );
a++;
}
例 :
var string a;
a = "red";
switch( a )
{
case "red":
MessageBox( "red" );
break;
case "green"
MessageBox("green");
break;
default:
MessageBox("other");
break;
}
例 :
var int a;
a = 1;
do
{
MessageBox(a);
a = a + 1;
}
while( a < 5 )
在使用 AtScript 时最主要的是如何对其进行扩展 , 其扩展的主要一点就是编写 AtsObject 对象并加到当前的 ScriptEngine 中
方法 :
1. 加入 Engine
CMyAtsObj * pNewObj = new CMyAtsObj;
pNewObj->m_pEngine = &Eng;
Eng.AddObjIns( "MyObj" , pNewObj );
// Add Const Var
Eng.SetConstVar("SS_INSTALL" , "1", ATSVAR_TYPE_INT );
if( !Eng.RunSegment( "Main") )
{
strPrompt.Format("Script is error, ErrorCode=%d,Line = %d,ErrorWord=%s" , Eng.m_nLastErrorCode , Eng.m_nErrorLine , Eng.m_strErrorWord );
AfxMessageBox( strPrompt );
}
l CMyAtsObj 要从 CAtsObject 继承
2. 在 CMyAtsObj 中实现 BOOL CMyAtsObj::DoFun( LPCTSTR sFunName , CAtsParam *pParam )
如 :
BOOL CMyAtsObj::DoFun( LPCTSTR sFunName , CAtsParam *pParam )
{
CString strFunName = sFunName;
if( strFunName.CompareNoCase("Test") == 0 )
{
if( atoi( pParam->GetItemData(1) ) < 3 )
pParam->SetReturnDataEx( "" , ATSVAR_TYPE_STRING );
else
pParam->SetReturnDataEx( "abc" , ATSVAR_TYPE_STRING );
return true;
}
else if( strFunName.CompareNoCase("GetName") == 0 )
{
pParam->SetReturnData( _T("MyObj") );
return true;
}
else if( strFunName.CompareNoCase("CreateSubObj") == 0 )
{
CSubObj *pObj = new CSubObj;
pObj->m_strMyName = "abc123";
pParam->SetReturnData_Obj( (CAtsObject *)pObj );
return true;
}
else if( strFunName.CompareNoCase("DoSdEdit") == 0 )
{
CValueSet *pObj;
pObj = GetValueSetParam( pParam , 1 );
DoSdEdit( pObj );
return true;
}
return false;
}
3. 在脚本中使用
strName = Myobj.GetName()
1. 重载 CAtsEngine
2. 重载 CAtsEngine:: CreateAtsObject(LPCTSTR strName)
如 :
If ( strName == “Install.IAParam” )
{
CMyAtsObj * pNewObj = new CMyAtsObj;
Return pNewObj
}
3. 在脚本中使用
Var CObject obj
Set obj = CreateAtsObject( “Install.IAParam”)
* 注 : New 出来的对象不用去删除 , 因为 Engine 会把指针放在 CAtsVarItem 中 , 在删除 CAtsVarItem 时会自动删除 , CAtsVarItem 中会存放该指针
基本型变量 : 值传递
类 : 地址传递