如何在你的软件中加入脚本功能

 

源码下载: http://www.atopsoft.net/AtScriptDemo_chs.zip

前言

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

 

类的设计

CAtsEngine

功能:为 AtScript 的引擎 , 负责脚本的执行

CAtsObject

AtString 中的用户对象 , 但对象在类型要事先在 CAtsEngine 中进行声明 , : 只有在 CAtsEngine.AddObjIns( "MyObj" , pNewObj ); 后,才可以使用。

命令说明

参考 AtScript.chm

变量

使用 Var 进行申明

用户变量

  Var string myvar;

       Var int myvar;

 

变量集

在变量集中可以存放多个变量

: Var CValueSet myvar;

 

语句

If 语句

if (condition)
    statement1
else
    statement2  

For 语句

:

var int a;

for( a = 2 ; a < 6 ; a++ )

   MessageBox(a);

 

While 语句

:

var int a;

   a = 1;

   while( a < 5 )

   {

     MessageBox( a );

     a++;

   }

 

switch 语句

:

  var string a;

  a = "red";

  switch( a )

  {

       case "red":

              MessageBox( "red" );

                break;

       case "green" 

              MessageBox("green");

                break;

       default:

              MessageBox("other");

                break;

  }

 

Do 语句

:

var int a;

   a = 1;

   do

   {

     MessageBox(a);

     a = a + 1;

   }

   while( a < 5 )

使用 AtsObject 对象

在使用 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()

在脚本运行过程中由 Engine 动态创建对象

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 中会存放该指针

 

 

关于赋值

基本型变量 : 值传递

: 地址传递

 

你可能感兴趣的:(脚本,list,function,string,javascript,behavior)