小弟初学com,现遇到一个问题,想在一个com工程里面定义一个函数,输入参量为数组类型,因为这个com需要在vb下调用。调用的时候给出的参数是一个数组。请各位帮帮忙,如何实现函数的输入参量为数组的问题。最好能告诉我一段代码。我本来是用BSTR类型输入参量的。可是发现不对。

解决方案 »

  1.   

    你可以在idl文件中typedef 一个数组或者vector
    记住一定要typedef
    随后接口中就可以使用这个数组或者vector了!
      

  2.   

    to  Paris_Luo(不是很懂) 
    这样跨进程、套间调用会有问题的。可以用但不是标准的做法。
    在IDL里面定义好就可以了。
    HRESULT Method1 ([in] char chBuf[10]);
    还有更高级的用法,如变长的数组等等。
      

  3.   

    使用安全数组
    VB
      dim var(5)
      var(0)=1
      ....
      var(4)=5
      ....
       interface.PutArray(var);  
      .....  
    VC
    STDMETHODIMP Cinterface::PutArray(VARIANT  * var)
    {
    // TODO: Add your implementation code here
      HRESULT hr;
    VARIANT varstr;
             varstr.vt=VT_BSTR;
    long  Ucolnum(0),Lcolnum(0);
    var->vt=VT_ARRAY|VT_VARIANT;//安全数组
    try
    {

    SafeArrayGetUBound(*var->pparray,1,&Ucolnum);
    SafeArrayGetLBound(*var->pparray,1,&Lcolnum);
    long rgsabound[2];
    for(int i=Lcolnum;i<Ucolnum;i++)
    {
    rgsabound[0] =i; 
    rgsabound[1] =0;
    hr= SafeArrayGetElement(*var->pparray, 
    rgsabound, &varstr);
                               //得到var[i]为varstr

    }
             
              }
    catch(...)
    {
               return S_FALSE;
    }
     
    return S_OK;}
      

  4.   

    To  volcary((冰火山)) 谢谢,也正为这个问题头晕,用些法已经搞定,呵:)