2011-04-27 12 views
0

OS:Windows 7の32ビット 研究開発をツール:Visual Studioの2008グリッドコントロール:実行時エラーのVisual StudioでのWindows XPで実行して2008

問題: のWindows 7で実行すると、それはOKですが、XPでありDEBUGモードでのアサーションエラー、RELEASEモードでの目に見えないグリッドコントロールエラーです。

状況(あなたは下の写真のようにそれを見ることができるように):

  • グリッドコントロールクラスを、私はcode-projectからダウンロードした、プログラムで使用しました。 (私はstackoverflowでファイルをアップロードすることはできないと思う?それが必要な場合は、私に教えてください。)

  • 私はこのクラスをVS 6.0で使用しました。 VS 9.0で初めて使用しました。 VS 6.0で使用してもエラーはありませんでした。

  • Windows 7およびXPでプログラムをコンパイルすると、コンパイルエラーは発生しません。

  • Windows 7では、DEBUGモードとRELEASEモードの両方でうまく動作します。

  • Windows XPでは、EXEファイルをDEBUGフォルダに実行すると、アサーションエラーが発生します。そして、RELEASEフォルダにexeファイルを実行すると、グリッドコントロールが表示されません。

  • また、Visual StudioでXPでコンパイルを試みてエラーがないかどうかを確認しましたが、実行時エラーが発生します。

エラー:

デバッグアサートに失敗しました!プログラム:... ファイル:.../gridctrl_src/gridcell.cpp ライン:228あなたのプログラム は、アサーションの失敗を引き起こす可能性があります方法については

、 上のVisual C +ドキュメントがアサート を参照してください。

以下はエラーラインのgridcell.cppソースコードです。

///////////////////////////////////////////////////////////////////////////// 
// CGridDefaultCell 

CGridDefaultCell::CGridDefaultCell() 
{ 
#ifdef _WIN32_WCE 
    m_nFormat = DT_LEFT|DT_VCENTER|DT_SINGLELINE|DT_NOPREFIX; 
#else 
    m_nFormat = DT_LEFT|DT_VCENTER|DT_SINGLELINE|DT_NOPREFIX | DT_END_ELLIPSIS; 
#endif 
    m_crFgClr = CLR_DEFAULT; 
    m_crBkClr = CLR_DEFAULT; 
    m_Size = CSize(30,10); 
    m_dwStyle = 0; 

#ifdef _WIN32_WCE 
    LOGFONT lf; 
    GetObject(GetStockObject(SYSTEM_FONT), sizeof(LOGFONT), &lf); 
    SetFont(&lf); 
#else // not CE 
    NONCLIENTMETRICS ncm; 
    ncm.cbSize = sizeof(NONCLIENTMETRICS); 
    VERIFY(SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS), &ncm, 0)); 
    SetFont(&(ncm.lfMessageFont)); 
#endif 
} 

ありがとうございます! VC6からVS2012にプロジェクトを移植しながら、

答えて

0

自分の質問に答えて...

てSystemParametersInfo(SPI_GETNONCLIENTMETRICS、...)問題

// Initially use the system message font for the GridCtrl font 
     NONCLIENTMETRICS ncm; 
     memset(&ncm,0,sizeof(NONCLIENTMETRICS)); 
     ncm.cbSize = sizeof(NONCLIENTMETRICS); 
#if (WINVER >= 0x0600) 
     ncm.cbSize -= 4; //<== ADD HERE!! 
#endif 
     BOOL f = SystemParametersInfo(SPI_GETNONCLIENTMETRICS,sizeof(NONCLIENTMETRICS), &ncm, 0); 

     VERIFY(f); 
     if(f){ 
      memcpy (&m_LogFont, &ncm.lfMessageFont, sizeof (LOGFONT)); 
      m_LogFont.lfHeight = -MulDiv (11, dc.GetDeviceCaps (LOGPIXELSY), 72); 
      m_LogFont.lfWeight = FW_NORMAL; 
      m_LogFont.lfOutPrecision = OUT_DEFAULT_PRECIS; 
      m_LogFont.lfClipPrecision = CLIP_DEFAULT_PRECIS; 
      m_LogFont.lfQuality = DEFAULT_QUALITY; 
      m_LogFont.lfPitchAndFamily = DEFAULT_PITCH | FF_DONTCARE; 
      m_LogFont.lfCharSet = ANSI_CHARSET; 
      _tcscpy (m_LogFont.lfFaceName, _T ("Courier New")); 
     } 
+0

勉強のための良い状況 –

1

は私がCGridCtrlのと同じ問題に遭遇しました。

プロジェクトでは、_WIN32_WINNTを、アプリケーションでサポートする最低のターゲットプラットフォームに設定します。それはXP SP1の場合は0x0501です。 CGridDefaultCellにコードを変更する必要はありません。

Related discussion(英語)

関連する問題