我的C#OpenTK屏幕保護程序應用程序有非常奇怪的問題。當我編譯程序並在更改擴展名之前運行它,如EXE文件,它工作正常。但是,當我將擴展名更改爲SCR並運行它時,它會崩潰並出現System.EntryPointNotFound異常(本例中爲glCreateProgram函數)。在調試器中我已籤,當我運行:無法在屏幕保護程序中找到DLL'opengl32.dll'中的入口點
爲EXE文件: GL.GetString(StringName.Vendor) - > 「英特爾」 GL.GetString(StringName.Version) - >「2.1.0 - 建立8.15.10.2622"
爲SCR文件: GL.GetString(StringName.Vendor) - > 「微軟」 GL.GetString(StringName.Version) - > 「1.1.0」
在我的應用程序我使用GameWindow類的無參構造函數來創建OpenGL上下文。對於小實驗,我將擴展名更改爲BAT,並且運行得非常好。我不知道爲什麼我的OpenGL上下文依賴於文件擴展名,我猜想屏幕保護程序是由某種疊加層上的系統執行的,但我確實無法找到解決此問題的解決方案。
任何想法?
這是一個DLL地獄問題,你有OPENGL32.DLL的多個版本的機器上。 Windows找到另一個當你重命名爲.scr,毫無疑問是在C:\ WINDOWS \ SYSTEM32 – 2012-03-25 14:26:50
我檢查,我的電腦上有兩個副本的庫opengl32.dll - 首先在C:\ WINDOWS \ SYSTEM32 \和第二個在C:\ Windows \ winsxs \ ...但這兩個文件是相同的版本。 – 2012-03-25 15:14:45
對,這是微軟的版本。您尚未找到英特爾版本。顯然你的EXE程序可以。啓用非託管調試並查看Debug + Windows +模塊以查看它所在的位置。 – 2012-03-25 15:20:20