[原]client通过ActiveX与flash交互方法简介

时间:2021-10-31 20:45:05

client要与flash交互,只要使用以下3个函数:

HRESULT CallFunction([in] BSTR request, [out, retval] BSTR* response);
HRESULT SetReturnValue([in] BSTR returnValue);
void FlashCall([in] BSTR request);

CallFunction和SetReturnValue是IShockwaveFlash接口中定义的。
FlashCall是_IShockwaveFlashEvents接口中定义的。

  1. CallFunction
    CallFunction的作用是由client调用flash中函数,request参数是一个xml,包含了要调用的函数名和参数,response是flash函数的返回值,也是同样格式的xml。
  2. FlashCall
    _IShockwaveFlashEvents是一个连接点,当flash调用client时,就会调用此接口中的FlashCall。参数request和CallFunction中的request一样,也是一个xml,包含函数名和参数。
  3. SetReturnValue
    FlashCall是没有返回值的,那么当client通过FlashCall被调用时,如何返回某些数据呢,就通过SetReturnValue函数。SetReturnValue的参数returnValue同样是个xml,但只是request格式xml的一个节点。
  4. xml格式
    xml格式如下:
    <invoke name="foo" returntype="xml">
        <arguments>
            <number>10</number>
            <string>hello flash</string>
        </arguments>
    </invoke>
    invoke节点是根节点,name属性是要调用的函数名returntype属性必须为"xml"。
    arguments下是参数列表,这个例子中是一个number型参数和一个string型参数。
    CallFunction和FlashCall的参数都是这种格式的xml,但SetReturnValue的参数只是arguments下面一个子节点,例如"<number>10</number>"。
  5. flash支持的参数类型
    flash支持的参数类型如下:
     
    AS class/value c++ class/value format comments
    null NULL <null/>  
    Boolean true bool true <true/>  
    Boolean false bool false <falsh/>  
    String BSTR <string>string value</string>  
    Number int/double <number>-12</number>
    <number>3.14</number>
     
    Array(元素可以是混合类型) 允许混合类型元
    素的集合,如vector<VARIANT>
    <array>
      <property id="0">
        <number>3.14</number>
      </property>
      <property id="2">
        <string>string value</string>
      </property>
      ...
    </array>
    property 节点定义各个元素,而 id 属性为从 0 开始的数值索引。
    Object 含有字符串键和
    对象值的字典,
    如map<string, VARIANT>
    <object>
      <property id="name">
        <string>John Doe</string>
      </property>
      <property id="age">
        <string>33</string>
      </property>
      ...
    </object>
    property 节点定义各个属性,而 id 属性为属性名称(字符串)。
    其它内置或自定义的类   <null/>

    <object></object>
    ActionScript 将其它对象编码为 null 或空对象。不管是哪种情况,所有属性值都会丢失。

    这里要注意,flash穿出的参数不区分整型和符点型,因此需要自己对number类型做判断,比如可以查找如果value中包含'.',就说明是符点型。