2012-03-25 93 views
4

我的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上下文依賴於文件擴展名,我猜想屏幕保護程序是由某種疊加層上的系統執行的,但我確實無法找到解決此問題的解決方案。

任何想法?

+0

這是一個DLL地獄問題,你有OPENGL32.DLL的多個版本的機器上。 Windows找到另一個當你重命名爲.scr,毫無疑問是在C:\ WINDOWS \ SYSTEM32 – 2012-03-25 14:26:50

+0

我檢查,我的電腦上有兩個副本的庫opengl32.dll - 首先在C:\ WINDOWS \ SYSTEM32 \和第二個在C:\ Windows \ winsxs \ ...但這兩個文件是相同的版本。 – 2012-03-25 15:14:45

+1

對,這是微軟的版本。您尚未找到英特爾版本。顯然你的EXE程序可以。啓用非託管調試並查看Debug + Windows +模塊以查看它所在的位置。 – 2012-03-25 15:20:20

回答

1

最後,經過漫長的搜索,我發現英特爾使用OpenGL阻止了屏幕保護程序的硬件支持。我已經改變擴展到「sCr」來騙過司機,現在一切正常。

鏈接: opengl.org forum

相關問題