title: OLE/COM Object Viewer output differs from what programmatic inspection shows
body: <p>If I use the OLE/COM Object Viewer (oleview.exe) from Visual Studio (2015) to display (generate) IDL from the Excel executable (from MSO 2007), I see that lots of methods in lots of interfaces have an LCID parameter.</p>
  
  <p>For instance, the Volatile() method of the _Application interface. The oleview-generated IDL looks like:</p>
  
  <pre><code>HRESULT Volatile([in, optional] VARIANT Volatile, 
                   [in, lcid] long lcid);
  </code></pre>
  
  <p>(Also, how can an optional parameter be followed by non-optional ones?)</p>
  
  <p>If I use the Win32 API (LoadTypeLibEx(), ITypeLib, ITypeInfo, etc) to inspect the same Excel executable as a type library, I don't see such parameters at all. If I were to generate a corresponding C++ declaration based on what ITypeInfo methods tell me, it would be just:</p>
  
  <pre><code>HRESULT Volatile(VARIANT Volatile);
  </code></pre>
  
  <p>I have not seen corresponding weirdness in the Word type library (which isn't inside the Word executable, but in a separate msword.olb file). At least not for those interfaces in it that one comes across right from the start when investigating this stuff, i.e. _Application and Document.</p>
  
  <p>What is going on?</p>