众人拾材

Discussion in 'Wealth-Lab Developer' started by 思迷思, Aug 3, 2005.

  1. 置顶的WLD指南是很好的学习材料,共有19章,谁愿意参加翻译一人一章。
    众人拾材火炎高。
    我先认领第19章进行翻译。
     
  2. 你的想法好,相信你的工作会让更多的人使用WLD,也可促进大家水平的共同提高。!!!
     
  3. 19 COM支持

    19.1 COM支持概貌
    请相信,WLD3.0是一款全能的应用程序而且不仅通过自身的完善加强还通过WL社区你和大家贡献的代码库继续着复杂性延续和扩展。为实现真正的所想即所得,还发行了一个类库,此类库成为尽情发挥想象力的平台。因为嵌入了面向组件模型技术,WL可通过任何支持COM的应用程序包括Delphi, VC++, 及 VC#, VBA, VB6, VB.NET, 和其它开发工具进行扩展。
    Wealth脚本语言提供的支持
    Wealth脚本语言中有一些特殊的函数和数据类型可以实现在Wealth脚本语言中直接地创建和使用COM对象。
    COM(OLE)自动化
    WL自身提供了一个COM接口能够实现外部程序与WL的交互。
    创建COM插入件
    COM 插入件是一些能在图表脚本里执行交易系统规则的DLL。使用插入件能够实现用脚本语言不能实现的任何的高级处理过程。
    创建COM适配器
    通过创建与使用静态和动态的数据源适配器可以扩大WLD3.0分析和交易平台的应用范围。虽然WL自身也带有众多流行的图表格式,但使用图表格式API却可以设计出独特效果的图表样式。
     
  4. 19.2 WS(WealthScript)对COM的支持
    WS包含一些特殊的函数与数据类型使得能够直接在脚本语言中创建与操作COM对象。使用函数CreateOleObject能创建一个COM对象实例。将对象的COM“类名”传给函数,函数就能创建并返回一个对象实例。此实例应存于ComVariant数据类型的变量中。
    范例 (仅用于例证)
    {Create an instance of a COM object }
    var lib : ComVariant ;

    lib := CreateOleObject (‘AddOnLib.WLAddon’ ) ;
    lib.DoSomething ;
    在上面的例子中,我们用“AddOnLib.WLAddon”类名创建了一个COM对象实例。一旦有了COM对象,我们就可以调用对象中定义的任何方法。

    迟绑定
    WS应用“迟绑定”来访问COM对象中的方法。迟绑定是指:(设计时)不知道对象的接口,只有在(运行使用时)创建了对象实例才知道其接口。在WS中创建和用来交互的COM对象应是使用了Idispatch的“双”接口。特别地,在VB 或 VBA中创建并用于交互的COM对象也能在WS中生成。

    COM对象的返回值
    WS以ComVariants的类型从COM对象中返回值.如果需要访问COM对象的返回值,就可以用一套特殊的WS函数将返回值转换成所需类型。
    AsInteger Convert to integer
    AsString Convert to string
    AsBoolean Convert to boolean
    AsFloat Convert to float
    范例
    var lib : ComVariant ;
    var rc : integer ;
    lib := CreateOleObject (‘AddOnLib.WLAddon’) ;
    rc := AsInteger (lib.PerformFunction ) ;

    COM 类型的数组
    WS也支持与COM对象间COM类型的双向数组传递。
    当需要向COM附件传递一个任意大小的数组,COM附件用此数组存放调用ChartScript 返回的其它值时,这种互递是一项很有用的功能。下面是此处理过程的一个完整的例子。
    范例
    {WealthScript code (client side)}
    var vc : ComVariantArray ;
    var obj : ComVariant ;
    vc := [1, 2, 3, 4] ;
    obj := CreatOleObject(‘AddOnExample.System1’);
    obj.FillArray(vc);
    ShowMessage( IntToStr ( vc[2] ) ) ;
    将值分配给ComVariantArray的另一种方法是用已存在的WS数组给它付值。

    范例
    var vc : ComVariantArray ;
    var obj : ComVarriant ;
    var ar : array [ 0…..100 ] of integer ;
    vc := ar ;
    obj := CreateOleObject ( ‘AddOnExample.System1’ ) ;
    obj.FillArray ( vc ) ;
    比较由VB6写的进程服务器例子,它们看起来象如下的样子。
    范例(VB6 动态链接库)
    ‘名为‘AddOnExample’的DLL的system1类对象代码’
    Public Sub FillArray( ByRef COMArray As Varriant )
    Dim i As Long
    For I = 0 To Ubound(COMArray)
    COMArray(i) = 100 – i ‘ Chang the values
    End Sub
    想了解WS数组的更多情况,可参考WS指南中的相应专题。
     
  5. 19.3 COM(OLE)自动化(1)

    Wealth-Lab 本身提供了COM接口用来实现外部程序与Wealth-Lab系统的交互。WLD3.0的库名是“Wealth-Lab”,接口名是“WL3”。升级为WLD3.0后,如果仍想使用可称为“遗老”的WL系统进行自动化则仍可使用老版本的库名。
    WL3 函数
    下列自动化函数是当前提供的,随着需求的提高仍会不断增加。
    ExecuteScript ( Script , WatchList , Symbol : string ) ;
    让WLD3.0执行特殊表单和符号上特殊的图表脚本语言。如果图表上已有符号脚本语言就会执行。
    ExecuteScriptTimed ( Script , WatchList , Symbol : string ) : integer ;
    与ExecuteScript相同,此函数返回为完成运算已消失的毫秒数。
    WebUpdate ( DataSource : string ) ;
    让WLD3.0对特殊的数据源执行一次“站点刷新”。数据源管理器也同样进行一次刷新,完成后数据管理器就关闭。
    AddAlert ( Symbol : string ; AlertType : AltertTypeEnum ; Shares : integer ; OrderType : OrderTypeEnum ; AlertPrice : double ) ;
    向预警管理器(The Quote Manager)加一条新的预警。AlertType必须包含一由AltertTypeEnum定义的枚举值。与此类似,OrderType参数也要包含一个由OrderTypeEnum定义的枚举值