我写的接口都是在VBA环境中调用:
这样定义一个函数 DISP_FUNCTION(CExtFuncs, "GetSubsystems", _GetSubsystems, VTS_VARIANT, VTS_BSTR)
问题1:如何让返回值是一个字符串数组?
问题2:一般返回字符串的时候都要使用SysAllocString来分配内存,但是这个分配的内存是否需要我来释放?正常来说原则是谁分配谁释放,但是这种情况下,我并不知道分配的内存什么时候用完?而且我尝试过释放似乎分配的内存已经释放了?谁知道麻烦指点一下。

解决方案 »

  1.   

    返回值用VARIANT类型,然后先用CComSafeArray保存你的字符串数组,然后再转成VARIANT,然会
      

  2.   

    不太明白,比如:
    VARIANT CExtFuncs::_GetMapVariantValue(LPCTSTR sNodeName, const VARIANT FAR& vPropName)
    {
    return GetIODataValue(sTagName, sPropName);
    }
    上面是我的脚本函数,用户在使用的时候会在一个VBA脚本编辑环境中调用次函数,那么我怎么知道函数什么时候返回?
      

  3.   

    脚本中用变量来接收数据
    var data = XXX._GetMapVariantValue()
      

  4.   

    继续问,现在我想知道的是
    1.“返回值用VARIANT类型,然后先用CComSafeArray保存你的字符串数组,然后再转成VARIANT”具体应该如何做?
    2.返回后我何时释放为返回值分配的内存?