【问题标题】:Default HRESULT hResult = E_NOTIMPL?默认 HRESULT hResult = E_NOTIMPL?
【发布时间】:2014-12-09 17:39:43
【问题描述】:

我正在开发一个基于 win7 的系统,使用 silverlight 嵌入式 UI 图形和 C++ 固件。我注意到在许多现有函数中(在我被带入项目之前编写),有一些代码我不太确定它在做什么。

HRESULT AddAlarm::AlarmType_SelectionChanged (IXRDependencyObject* pSender, XRSelectionChangedEventArgs* pArgs)
{
    HRESULT hResult = E_NOTIMPL;
    if((NULL == pSender)||(NULL==pArgs))
    {
      hResult = E_INVALIDARG;
    }
    //Code to set visibility of UI elements
   if(index ==0) //index is the threshold type index from the combobox. Can be 0-3.
   {
      m_pAlarmLowThreshold->SetVisibility(XRVisibility_Collapsed);
   }
   //Code repeats for other threshold types and visibility states.

 return hResult;
}

if 语句非常简单,函数返回 hResult,但我不明白声明 HRESULT hResult = E_NOTIMPL;。它声明了一个 HRESULT 类型的变量并为其分配了 E_NOTIMPL 的默认 HRESULT 值,但是由于该函数不会在 if 语句之外修改此值,这是否意味着它仍然是 E_NOTIMPL,基本上是告诉系统它(某事)没有实施还是错了?

【问题讨论】:

  • 可能是程序员使用的工具自动生成的代码,这对于 COM 代码很常见。它不太可能保留在 E_NOTIMPL,这将是一个很容易注意到的错误。特别是在 Silverlight 中,它会引发 NotImplementedException。
  • "//Irrellavent code" - 仅当在所述神秘袋中无处可更改 hResult 的值时才为真。

标签: c++ xaml winapi windows-ce


【解决方案1】:

我知道这个王者方法是通过VS界面自动生成的。内部代码总是类似

return E_NOTIMPL;

我认为你的前辈试图做的是通过向他们自己保证所有案例都以 E_NOTIMPL 开头来处理方法来开发该方法,该方法应该在方法处理期间进行更改。

这种方法在正常工作时应该返回s_OK。以下是可能的代码列表: http://msdn.microsoft.com/en-us/library/windows/desktop/aa378137%28v=vs.85%29.aspx

如果没有分配 S_OK 这意味着该功能确实没有完全实现,因此 E_NOTIMPL 似乎是正确的(或不是:))

【讨论】:

  • 在 AddAlarm 的类声明中,有一段代码:static HRESULT GetXamlSource(__in XRXAMLSource* pXamlSource) HRESULT hr = E_INVALIDARG; if(pXamlSource) { pXamlSource->SetResource(App:GetHInstance(), IDR_ADDALARM); hr = S_OK; } return hr; 这是否与上述代码理解有任何关系,因为这是类中唯一处理 HRESULT 的区域跨度>
  • E_NOTIMPL从不正确的,如果实现了一个方法。 E_NOTIMPL 常量保留用于报告某个方法确实没有实现。对于所有其他错误模式,请选择不同的返回值,或者如果您是接口的作者,请定义一个。
猜你喜欢
  • 1970-01-01
  • 2011-03-01
  • 2012-05-05
  • 2012-07-21
  • 2011-03-02
  • 2014-04-24
  • 2012-02-26
  • 2011-07-17
  • 2010-11-12
相关资源
最近更新 更多