private string ConvertEquationImpl(byte[] equationRawBytes) { MTAPI_DIMS dims = new MTAPI_DIMS(); var resultStringBuilder = new StringBuilder(INITIAL_RESULT_BUFFER_SIZE); var success = false; while (!success) { if (resultStringBuilder.Capacity > MAX_RESULT_BUFFER_SIZE) { throw new Exception("Could not convert due high memory usage"); } int result; try { result = Api.MTXFormEqnMgn( MTXFormEqn.mtxfmLOCAL, MTXFormEqn.mtxfmMTEF, equationRawBytes, equationRawBytes.Length, MTXFormEqn.mtxfmLOCAL, MTXFormEqn.mtxfmTEXT, resultStringBuilder, resultStringBuilder.Capacity, string.Empty, ref dims ); } catch (AccessViolationException e) { throw new Exception("Access violation exception while FormEqn." + e.ToString()); } success = MathTypeReturnValue.mtOK == result; if (MathTypeReturnValue.mtMEMORY == result) { resultStringBuilder.Clear(); resultStringBuilder.Capacity *= 2; // retry with increased buffer } else if (MathTypeReturnValue.mtTRANSLATOR_ERROR == result) { throw new Exception("mtTRANSLATOR_ERROR. Result eq: " + resultStringBuilder.ToString()); } else if (!success) { throw new Exception("MathType returned: " + result); } } return(resultStringBuilder.ToString()); }
protected bool ConvertToOutput() { bool bResult = false; //try //{ if (!m_sdk.Init()) { return(false); } if (MathTypeSDK.Instance.MTXFormResetMgn() == MathTypeReturnValue.mtOK && SetTranslator()) { Int32 stat = 0; Int32 iBufferLength = 5000; StringBuilder strDest = new StringBuilder(iBufferLength); MTAPI_DIMS dims = new MTAPI_DIMS(); // convert stat = MathTypeSDK.Instance.MTXFormEqnMgn( m_ei.iType, m_ei.iFormat, m_ei.bMTEF, m_ei.iMTEF_Length, m_eo.iType, m_eo.iFormat, strDest, iBufferLength, m_eo.strFileName, ref dims); // save equation if (stat == MathTypeReturnValue.mtOK) { m_eo.strEquation = strDest.ToString(); bResult = true; } } m_sdk.DeInit(); // } // catch (Exception e) // { // Console.WriteLine(e.Message); // return false; // } return(bResult); }
/// <summary> /// Transforms an equation (uses options specified via MTXFormAddVarSub, /// MTXFormSetTranslator, and MTXFormSetPrefs). /// </summary> /// <param name="sender">Parameter not used</param> /// <param name="e">Parameter not used</param> private void FormEqn_Click(object sender, EventArgs e) { long retVal = 0; string error; if (_isMTAPIConnected == false) { InternalStartAPI(true); } if (_isMTAPIConnected == true) { string srcString = "MathType!MTEF!2!1!+-feaaguart1ev2aaatCvAUfeBSjuyZL2yd9gzLbvyNv2CaerbuLwBLnhiov2DGi1BTfMBaeXatLxBI9gBaerbd9wDYLwzYbItLDharqqtubsr4rNCHbGeaGqiVu0Je9sqqrpepC0xbbL8F4rqqrFfpeea0xe9Lq-Jc9vqaqpepm0xbba9pwe9Q8fs0-yqaqpepae9pg0FirpepeKkFr0xfr-xfr-xb9adbaqaaeGaciGaaiaabeqaamaabaabaaGcbaGaaG4naiabgUcaRiaadIhaaaa!3892!"; string srcPath = @""; const int iDstLen = 10000; StringBuilder strDest = new StringBuilder(iDstLen); MTAPI_DIMS dims = new MTAPI_DIMS(); /* IntPtr ptr = Marshal.AllocHGlobal(1024); * int length = srcString.Length; * length = 2 * (length + 1); * IntPtr srcData = Marshal.AllocHGlobal(length); * Marshal.Copy(srcString.ToCharArray(), 0, srcData, srcString.Length);*/ byte[] srcData = System.Text.Encoding.ASCII.GetBytes(srcString); retVal = _MTSDK.MTXFormEqnMgn(mtxFormEqn.mtxfmLOCAL, mtxFormEqn.mtxfmMTEF, srcData, srcString.Length, mtxFormEqn.mtxfmLOCAL, mtxFormEqn.mtxfmTEXT, strDest, iDstLen, srcPath, ref dims); if (retVal == mtReturnValues.mtOK) { error = "Equation transformation was successful"; _appHelper.ShowOKDialog(error); } else if (retVal == mtReturnValues.mtNOT_EQUATION) { error = "Error: Source data does not contain MTEF"; _appHelper.ShowErrorDialog(error); } else if (retVal == mtReturnValues.mtSUBSTITUTION_ERROR) { error = "Error: Could not perform one or more rules"; _appHelper.ShowErrorDialog(error); } else if (retVal == mtReturnValues.mtTRANSLATOR_ERROR) { error = "Error: Errors occured during translation (translation not done)"; _appHelper.ShowErrorDialog(error); } else if (retVal == mtReturnValues.mtPREFERENCE_ERROR) { error = "Error: Could not set preferences"; _appHelper.ShowErrorDialog(error); } else if (retVal == mtReturnValues.mtMEMORY) { error = "Error: Not enough space in dstData"; _appHelper.ShowErrorDialog(error); } else { error = "Error: Some other error occurred"; _appHelper.ShowErrorDialog(error); } // Free memory allocated from hglobal allocation // Marshal.FreeHGlobal(srcData); } }