title: Differences between [in, out] and [out, retval] in COM IDL definitions
body: <p>In some of the IDL I work with I have noticed that there are 2 conventions for marking return values in methods - <code>[in, out]</code> and <code>[out, retval]</code>.</p>
  
  <p>It appears that <code>[in, out]</code> is used when there are multiple return values, for example:</p>
  
  <pre><code>HRESULT MyMethod(
      [in] long InputParam, 
      [in, out] long* OutputParam1, 
      [in, out] long* OutputParam2
  );
  </code></pre>
  
  <p>It appears that <code>[out, retval]</code> is used when there is only a single return value, for example:</p>
  
  <pre><code>HRESULT MyMethod2(
      [in] long InputParam, 
      [out, retval] long* OutputParam1
  );
  </code></pre>
  
  <p>Is this a COM IDL convention or just a convention in the code I am working with?</p>
  
  <p>Is there a functional difference in the code that will be generated from the 2 notations, or are they completely interchangeable?</p>