none
Win32GetFontData 関数によるフォントデータの取得ができない。 RRS feed

  • 質問

  • お世話になります。

    Visual Studio 2013 で実装した ASP.NET Web アプリケーションを Microsoft
    Azure Web アプリに発行した際、「App Service プランの価格レベル」が「無
    料」、「共有」の場合でのみ Win32GetFontData 関数によるフォントデータの
    取得に失敗します。制限事項に該当するのでしょうか。
    回避方法や価格レベル毎の制限事項等が記載されたドキュメントなどがありま
    したら、お教えください。

      ○実装コード(C#)
      public partial class MainPage : System.Web.UI.Page
      {
          [DllImport("gdi32.dll", EntryPoint = "SelectObject", CharSet = CharSet.Ansi)]
          static extern IntPtr Win32SelectObject(IntPtr hdc, IntPtr obj);
          [DllImport("gdi32.dll", EntryPoint = "GetFontData", CharSet = CharSet.Ansi)]
          static extern uint Win32GetFontData(IntPtr hdc, uint dwTable, uint dwOffset, [Out] byte[] lpvBuffer, uint cbData);

          protected void Page_Load(object sender, EventArgs e)
          {
              long m_Position = 4;
              byte[] buf = new byte[4];
              int count = 2;
              uint ret;
              Graphics m_Graphics = null;
              IntPtr s_HDC = IntPtr.Zero;
              IntPtr s_OldFont = IntPtr.Zero;
              System.Drawing.FontStyle fs = System.Drawing.FontStyle.Regular;
              System.Drawing.Font m_Font = new System.Drawing.Font("MS PGothic", 10, fs);

              if (m_Graphics == null) m_Graphics = Graphics.FromHwnd(IntPtr.Zero);
              s_HDC = m_Graphics.GetHdc();
              s_OldFont = Win32SelectObject(s_HDC, m_Font.ToHfont());
              ret = Win32GetFontData(s_HDC, 0, (uint)m_Position, buf, (uint)count);
              Win32SelectObject(s_HDC, s_OldFont);
              m_Graphics.ReleaseHdc(s_HDC);

              int cntTbl = (Int16)((buf[0] << 8) | buf[1]);

              if (cntTbl > 0)
              {
                  // 成功 ... 価格レベル「BASIC」、「STANDARD」
              }
              else
              {
                  // 失敗 ... 価格レベル「無料」、「共有」
              }
          }

    2015年4月28日 6:08

回答

  • こんにちは。

    明確なドキュメントはありませんが、無料および共有はインスタンスを占有したりしない(共用なので余計なことができないようにしている)はずなので、そのような制限があるのかもしれません。


    2016年6月21日 6:18
    モデレータ