0

我正在使用 QBFC 将快速书籍中的项目数据导入我自己的项目。

使用代码:1 我可以在快速书籍中找到总共有多少项目。

我有一个要求从快速书籍中找到每个项目类型的计数。

但是使用代码:我无法找到特定项目中有多少项目(例如:服务)

代码:1

IORItemRet itemRet = default(IORItemRet);
IORItemRetList itemRetList = default(IORItemRetList);
IResponse response = responseSet.ResponseList.GetAt(0);
if ((response.Detail != null))
{
    itemRetList = (IORItemRetList)response.Detail;
    if ((itemRetList != null))
    {
        int i = 0;
        for (int j = 0; j <= itemRetList.Count - 1; j++)
        {
        }
    }
}

代码:2

IItemServiceRet itemSeriveRet = default(IItemServiceRet);
IItemServiceRetList itemServiceRetList = default(IItemServiceRetList);
IResponse response = responseSet.ResponseList.GetAt(0);
if ((response.Detail != null))
{
    itemServiceRetList = (IItemServiceRetList)response.Detail;  //Com object Error
    if ((itemServiceRetList  != null))
    {
        int i = 0;
        for (int j = 0; j <= itemServiceRetList.Count - 1; j++)
        {
        }
    }
}

//Com对象错误

无法将“System.__ComObject”类型的 COM 对象转换为接口类型“Interop.QBFC10.IItemServiceRetList”。此操作失败,因为 IID 为“{C53D1081-9FE4-4569-9181-A9D7E0155907}”的接口的 COM 组件上的 QueryInterface 调用因以下错误而失败:不支持此类接口(来自 HRESULT 的异常:0x80004002 (E_NOINTERFACE)) .

现在让我看看如何从快速书籍中找到每个项目的数量

4

1 回答 1

0

在您的代码中,您似乎正在检查 response.Detail 是否为空。但是您是否也在检查 response.StatusCode 和 responseType 的值?如果您收到错误,那么您可能会收到可能未实现 IORItemRetList 接口的响应。请参阅屏幕参考中的以下代码。

IResponse response = responseList.GetAt(i);
//check the status code of the response, 0=ok, >0 is warning
if (response.StatusCode >= 0)
{
  //the request-specific response is in the details, make sure we have some
  if (response.Detail != null)
  {
    //make sure the response is the type we're expecting
    ENResponseType responseType = (ENResponseType)response.Type.GetValue();
    if (responseType == ENResponseType.rtItemQueryRs)
    {
      //upcast to more specific type here, this is safe because we checked with response.Type check above
      IORItemRetList OR = (IORItemRetList)response.Detail;
      WalkOR(OR);
    }
  }
}

请注意上面代码中的注释:

这是安全的,因为我们检查了 response.Type 检查上面

在 SDK 程序员指南 (p.107) 中它指出:

...作为查询响应的响应对象包含一个 Ret 列表对象,该对象可能包含多个 Ret 对象。一个不是查询响应的响应对象只包含一个 Ret 对象而没有 Ret list。在处理响应数据时,这种差异至关重要。

一旦你得到接口检查,你的 for 循环应该可以正常工作。

于 2013-03-25T21:53:36.337 回答