<!-- /* Font Definitions */ @font-face {font-family:Wingdings; panose-1:5 0 0 0 0 0 0 0 0 0; mso-font-charset:2; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:0 268435456 0 0 -2147483648 0;} @font-face {font-family:宋体; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:SimSun; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} @font-face {font-family:黑体; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:SimHei; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:1 135135232 16 0 262144 0;} @font-face {font-family:"/@宋体"; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} @font-face {font-family:"/@黑体"; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:1 135135232 16 0 262144 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; mso-pagination:none; font-size:10.5pt; mso-bidi-font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:宋体; mso-font-kerning:1.0pt;} h1 {mso-style-link:"标题 1 Char"; mso-style-next:正文; margin-top:17.0pt; margin-right:0cm; margin-bottom:16.5pt; margin-left:0cm; text-align:justify; text-justify:inter-ideograph; line-height:240%; mso-pagination:lines-together; page-break-after:avoid; mso-outline-level:1; font-size:22.0pt; font-family:"Times New Roman"; mso-font-kerning:22.0pt; font-weight:bold;} h2 {mso-style-next:正文; margin-top:13.0pt; margin-right:0cm; margin-bottom:13.0pt; margin-left:0cm; text-align:justify; text-justify:inter-ideograph; line-height:173%; mso-pagination:lines-together; page-break-after:avoid; mso-outline-level:2; font-size:16.0pt; font-family:Arial; mso-fareast-font-family:黑体; mso-bidi-font-family:"Times New Roman"; mso-font-kerning:1.0pt; font-weight:bold;} p {mso-margin-top-alt:auto; margin-right:0cm; mso-margin-bottom-alt:auto; margin-left:0cm; mso-pagination:widow-orphan; font-size:12.0pt; font-family:宋体; mso-bidi-font-family:宋体;} span.1Char {mso-style-name:"标题 1 Char"; mso-style-locked:yes; mso-style-link:"标题 1"; mso-ansi-font-size:22.0pt; mso-bidi-font-size:22.0pt; font-family:宋体; mso-fareast-font-family:宋体; mso-font-kerning:22.0pt; mso-ansi-language:EN-US; mso-fareast-language:ZH-CN; mso-bidi-language:AR-SA; font-weight:bold;} /* Page Definitions */ @page {mso-page-border-surround-header:no; mso-page-border-surround-footer:no;} @page Section1 {size:595.3pt 841.9pt; margin:72.0pt 90.0pt 72.0pt 90.0pt; mso-header-margin:42.55pt; mso-footer-margin:49.6pt; mso-paper-source:0; layout-grid:15.6pt;} div.Section1 {page:Section1;} /* List Definitions */ @list l0 {mso-list-id:348485849; mso-list-type:hybrid; mso-list-template-ids:491693728 -1644250838 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;} @list l0:level1 {mso-level-tab-stop:18.0pt; mso-level-number-position:left; margin-left:18.0pt; text-indent:-18.0pt;} @list l1 {mso-list-id:462315003; mso-list-type:hybrid; mso-list-template-ids:1018046716 247478196 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;} @list l1:level1 {mso-level-number-format:bullet; mso-level-text:; mso-level-tab-stop:75.0pt; mso-level-number-position:left; margin-left:75.0pt; text-indent:-18.0pt; font-family:Wingdings; mso-fareast-font-family:宋体; mso-bidi-font-family:"Times New Roman";} @list l2 {mso-list-id:877860773; mso-list-type:hybrid; mso-list-template-ids:1510740890 1301582774 1362113034 67698715 67698703 67698713 67698715 67698703 67698713 67698715;} @list l2:level1 {mso-level-number-format:alpha-lower; mso-level-tab-stop:36.0pt; mso-level-number-position:left; text-indent:-18.0pt;} @list l2:level2 {mso-level-tab-stop:57.0pt; mso-level-number-position:left; margin-left:57.0pt; text-indent:-18.0pt;} @list l3 {mso-list-id:1246039592; mso-list-type:hybrid; mso-list-template-ids:-2056072808 1391864146 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;} @list l3:level1 {mso-level-tab-stop:18.0pt; mso-level-number-position:left; margin-left:18.0pt; text-indent:-18.0pt;} @list l3:level2 {mso-level-number-format:alpha-lower; mso-level-text:"%2/)"; mso-level-tab-stop:42.0pt; mso-level-number-position:left; margin-left:42.0pt; text-indent:-21.0pt;} ol {margin-bottom:0cm;} ul {margin-bottom:0cm;} -->
源码下载: 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 中会存放该指针
关于赋值
基本型变量 : 值传递
类 : 地址传递