title: MathType in C# (OLE)
body: <p>I'm trying to run a MathType in a C# app... using OLE in forms to signify the equations/images.</p>
  
  <p>This is how I started with the code.
  I got the CLSID object for math type equation. I create a new instance and run a verb to start Math Type. This works good until I try to set or get data of the IDataItem attribute I have.</p>
  
  <p>Code:</p>
  
  <pre><code>string progID = "Equation.DSMT4";
  comRetVal= CLSIDFromProgID(progID, out eqContainerGUID);
  Type t = Type.GetTypeFromProgID(progID); //ok-&gt; MT6 Equation
  Object instance = Activator.CreateInstance(t);
  
  IDataObject oleDataObject = instance as IDataObject;
  MTSDKDN.MathTypeSDK.IOleObject oleObject = instance as IDataObject;
  
  //run verb Run For Conversion - I'm not sure what this verb does
  oleObject.DoVerb(2, (IntPtr)0, activeSite, 0, (IntPtr)this.Handle, new MathTypeSDK.COMRECT());
  
  //up to here everything is find
  
  //Now say I want to put a MathML string into the IDataObject
  //set format 
  formatEtc.cfFormat = (Int16)dataFormatMathMLPres.Id; //&lt;-this overflows. I verified that the only format that works is Presentation MAthML
  formatEtc.dwAspect = System.Runtime.InteropServices.ComTypes.DVASPECT.DVASPECT_CONTENT;
  formatEtc.lindex = -1;
  formatEtc.ptd = (IntPtr)0;
  formatEtc.tymed = TYMED.TYMED_HGLOBAL;
  
  //set medium
  ConnectSTGMEDIUM stgMedium = new ConnectSTGMEDIUM();
  string mathEqn = "&lt;math&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;/math&gt;";
  stgMedium.unionmember = Marshal.StringToHGlobalAuto(mathEqn);
  stgMedium.pUnkForRelease = 0;
  
  //if now i write the equation to console from STGMEDIUM i see that after each char there is a null. Is this normal?
  
  //now I try to set data in IDataObject and the OLE object
  //I thought this set the data of the ole object to the MathML string I put in STGMEDIUM
  oleDataObject.SetData(ref formatEtc, ref stgMedium, false);
  </code></pre>
  
  <p>The app now crashes with this exception:</p>
  
  <blockquote>
    <p>System.Runtime.InteropServices.COMException was unhandled Message="Invalid FORMATETC structure (Exception from HRESULT: 0x80040064 (DV_E_FORMATETC))" Source="System" ErrorCode=-2147221404 StackTrace: at System.Runtime.InteropServices.ComTypes.IDataObject.GetData(FORMATETC&amp; format, STGMEDIUM&amp; medium)</p>
  </blockquote>
  
  <p>I'm not sure what this means, but I think it might have to do with
  <code>formatEtc.cfFormat = (Int16)dataFormatMathMLPres.Id;</code>
  because that ID is 50000 and does not fit in a short (cfFormat is a short) so it overflows to something like -15000.</p>