【问题标题】:Getting value from two dimensional Safearray in C++从 C++ 中的二维 Safearray 获取值
【发布时间】:2010-07-30 09:41:04
【问题描述】:

我对 C++ 世界比较陌生。我希望从多维 SAFEARRAY 访问数据。但是,当我尝试检索该值时,我收到错误 0xC0000005:访问冲突读取位置 0x40e3e300。下面附上我的代码,标记的行是它出错的地方。希望有人可以阐明如何解决它。

 SAFEARRAY *ArrayCrosstabInfo = GetMainFrame().m_epsComHelper->GetCrosstab(m_arrayFieldnames,start,end);
  COleSafeArray ArrayCrosstab(*ArrayCrosstabInfo,VT_SAFEARRAY);

  BSTR *DataValue;
  ArrayCrosstab.AccessData((void**) &DataValue);

  long lUBoundX;
  long lUBoundY;

  ArrayCrosstab.GetUBound(1,&lUBoundX);
  ArrayCrosstab.GetUBound(2,&lUBoundY);

  long lOffset = 2;
  int nFieldIndex = 0;

  if (lUBoundX > 0 && lUBoundY > 0)
  {
    //only interested in DataValue[0,x]
    for (long i = lOffset; i<=lUBoundY; i++)
    {
      _bstr_t theData((BSTR)DataValue[0,i],FALSE); <==ERRORS HERE
     //Display (BSTR)theData;
    }
  }

【问题讨论】:

    标签: c++ safearray


    【解决方案1】:

    伙计们,设法解决了它。没什么特别的,但它就在这里。

     SAFEARRAY *ArrayCrosstabInfo = GetMainFrame().m_epsComHelper->GetCrosstab(m_arrayFieldnames,start,end);
    
      int lOffset = 2;
      long index[2];
    
      long lUBoundX;
      long lUBoundY;
    
      SafeArrayGetUBound(ArrayCrosstabInfo, 1, &lUBoundX);
      SafeArrayGetUBound(ArrayCrosstabInfo, 2, &lUBoundY);
    
      if (lUBoundX >= 0 && lUBoundY >= 0)
      {
        double theResult = 0;
        for (long i=lOffset; i<=lUBoundY; i++)
        {
         index[0] = 0;
         index[1] = i;
    
         SafeArrayGetElement(ArrayCrosstabInfo, index, &theResult);
    
         std::ostringstream strs;
         strs << theResult;
         std::string str = strs.str();
         CString cs(str.c_str());
         //display cs
        }
      }
    

    【讨论】:

      【解决方案2】:

      您的索引在这一行不正确:

      _bstr_t theData((BSTR)DataValue[0,i],FALSE);
      

      在 C++ 中,二维数组被索引为 array[x][y]。此外,索引从 0 开始,因此您可能需要将错误的行修复为类似

      _bstr_t theData((BSTR)DataValue[0][i-1],FALSE);
      

      【讨论】:

      • 感谢您清除索引部分,不太确定。关于从 0 开始的索引,我实际上希望我的循环从位置 3 开始,因此是偏移量。进行了这些更改,但仍然遇到从数组读取的问题(同样的错误)。顺便说一句,数组的维度为 [2][6]...
      猜你喜欢
      • 2013-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-25
      相关资源
      最近更新 更多