COM接口:/* 返回字符串数组 */
HRESULT GetArray( [out,retval] VARIANT* pArray );
在网页上测试,用javascript实现。
网上的例子有两种说法,一种是用VBArray转换,一种是用ActiveXObject。但我都没试用成功。
希望大家帮下忙,给个完整的例子。万分感激!

解决方案 »

  1.   

    http://www.vc180.com/kaifa/yingyong/1841.html 
    JS调用C++,通过设置DIID_HTMLDocumentEvents事件,来捕获HTMLWINDOW上的事件,再通过事件对象的get_srcElement得到事件源,从而得到指定元素对象,从而获取元素的信息得到脚本传过来的数据,来进行调用
      

  2.   

    能不能再讲得详细一些?
    我以前从没接触过javascript,所以能不能给出个示例代码?
      

  3.   

    不知道怎么用javascript实现,但知道怎么用vbscript实现。<script language="vbscript">
    function GetNetWorkAddresses()
            Dim IPArray
            IPArray = CXXX.GetNetWorkAddresses( true, true )        Dim IPList
            Dim index
            for index = LBound( IPArray ) To UBound( IPArray )
             IPList = IPList + IPArray( index ) + ";"
            Next

            document.GetElementById( "IPList" ).value = IPList
    end function
    </script>
      

  4.   

    我找到了一种方法,但不知道是不是标准的处理方法:
    在COM中通过事件来传递字符串数组。STDMETHODIMP CTestArray::SetEvent(void)
    {
            // 1. 获取SAFEARRAY( SAFEARRAY* psa )
               for ( ... ... )
               {
                       /* 注意此处是通过VARIANT数据进行赋值 */
                       VARIANT var;
                       VariantInit( &var );
                       V_VT( &var ) = VT_BSTR;
                       ...
                       SafeArrayPutElement( psa, &index, &var );
                       ...
                }
            // 2. 通过事件传递字符串数组
                 this->Fire_OnEvent( &psa )
            // 3. 回收内存,返回S_OK
    }        在javascript代码中,通过接收事件接收字符串数组:<object id="test" classid="..." codebase="...">
    </object><form>
            <p> <input id="btnGetStrings" name="Submit" type="button" value="Strings" onclick="GetStrings()">
                <input id="strings" type="text" value="">
                </p>
    </form>
    <script language="javascript">
            function GetStrings()
            {
                    test.SetEvent();
            };
    </script>
    <script language="javascript" for="test" event="OnEvent(parray)">
            var MyArray = new VBArray( parray ).toArray();
            document.getElementById( "strings" ).value = MyArray.toString();
    </script>
    其中需要注意的地方:
    1、这个方法对于除BSTR外其他的数据类型是否有效,我没有试过。
    2、需要将Fire_OnEvent中处理此数组的地方修改一下:
       将 
           avarParams[0] = parray;
       改成以下形式:
           avarParams[0].vt = VT_ARRAY | VT_BYREF | VT_VARIANT;
           avarParams[0].pparray = parray;
    3、在此过程中,某些地方是VT_VARIANT,而不是VT_BSTR,在这些地方一定要注意。包括:
        (1) 调用SafeArrayCreate创建安全数组时
        (2) 在事件函数Fire_OnEvent中
       而在SetEvent接口函数的for循环中,var的类型是VT_BSTR。