0

Visual Studio 2008 の MFC アプリケーションで opengl を使用しています。wglmakecurrent でプロジェクトがクラッシュします。

アクセス違反読み取り箇所

これは特定のケースでのみ発生するため、おそらくドライバーの問題ではありません。また、同じエラーが発生する別のマシンをチェックインしました。

エラーは、次の関数の wglMakeCurrent(m_hDC,m_hRC) で発生します。

void CCETIGLView::Convert2D(CPoint win, GLdouble * objx, GLdouble * objy, GLdouble * objz) { if((m_hDC) && (m_hRC)) {

wglMakeCurrent(m_hDC,m_hRC); }

パラメータには次のタイプがあります。

HGLRC m_hRC;

HDC m_hDC;

これらは、cview の子クラスである glview クラスから取得されます。

wglMakeCurrent 関数をチェックすると、GetLastError() に対して 0 が返されます。これは、特定のオプションをレンダリングし、他のオプションが正常に機能する場合に発生します。

シングルスレッドを使用しているため、マルチスレッドの問題もカウントされません。

4

1 に答える 1

0

このテスト

if((m_hDC) && (m_hRC))

クラスの作成時に m_hDC と m_hRC が 0 に初期化されていることが確認されている場合にのみ意味があります。これにより、それらが初期化されていることが実際にわかります。おそらくこれを行っていないため、これらの変数にはゼロ以外のガベージが含まれているため、有効なハンドルで初期化されていると誤解されています。

コンストラクターに定数の初期化を追加する

CCETIGLView::CCETIGLView() :
    m_hDC(0), m_hRC(0)
{
    // ...
于 2012-11-05T09:10:27.113 に答える