2012-09-22 67 views
0

考慮下面的代碼:的OpenGL的PInvoke呼叫的最終化導致訪問衝突

using System.Runtime.InteropServices; 

namespace GLTest 
{ 
    class Program 
    { 
    [DllImport("opengl32.dll")] 
    protected static extern uint glGetError(); 

    ~Program() 
    { 
     GLCall(); 
    } 

    public void GLCall() 
    { 
     glGetError(); 
    } 

    static void Main(string[] args) 
    { 
     var p = new Program(); 
     p.GLCall(); 
    } 
    } 
} 

時GLCall從〜程序啓動它會導致AccessViolationException。 任何線索? 操作系統:Win7 Pro 64

+1

好吧,它看起來像破壞者在節目中運行得太晚了。我想你需要確保在'Main'完成之前最後一次pinvoke調用是由你明確的。 –

回答

0

如果不在之前創建任何OpenGL渲染上下文,就不能調用OpenGL函數。代碼中存在未定義的行爲。

最好的做法是:

  1. 創建WindowsForm應用。
  2. 創建一個OpenGL渲染上下文。
  3. 調用需要OpenGL函數進行渲染或其他操作。
+0

你可以調用'glGetError'而不做任何。問題出現在通話執行時。 –