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

 

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

 

 

关于赋值

基本型变量 : 值传递

: 地址传递

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值