2013-01-02 25 views
1

我在構建一個鏈接到OpenGL的DLL。但是當我調用glGenBuffers等函數時會出現問題,因爲顯然__glewGenBuffers(和其他glew緩衝函數)爲空。一切正常編譯,相同的代碼在可執行文件中工作,但不在我的DLL中。我正在使用VS 2010.關於從DLL鏈接到OpenGL的任何想法?從DLL鏈接到OpenGL:運行時glew函數爲空

編輯:我忘了提及,我實際上試圖將引擎(靜態庫)鏈接到DLL,並且exe文件也使用它(它幾乎做了所有事情,除了我想要放的一小部分在我的DLL中)。我肯定會很好地使用DLL中的OpenGL調用,而不是鏈接引擎,如果我能更好地工作。

+1

你可能會嘗試GLee,看看它的行爲是否更好...我認爲我有GLee從DLL中運行良好。另外,是OpenGL只用於DLL,還是主要的應用程序使用它? –

+0

我不熟悉GLee,但我會看看它。我編輯了我的帖子,是的,OpenGL被dll和exe使用。 – MasterOfBinary

回答

2

GLEW必須執行一些技巧才能處理某些平臺上的依賴於上下文的函數指針。其中一個平臺是Windows。爲了讓事情工作萬無一失的方法是

  1. 測試,如果確實有約束一個OpenGL上下文
  2. 調用glewInit()

每次在DLL中的函數被調用使用擴展的OpenGL功能。即

… some_DLL_exported_function(…) 
{ 
    if( NULL == wglGetCurrentContext() || 
     GLEW_OK == glewInit()) { 
     return …; 
    } 
} 
+1

完美,謝謝。雖然我相信它應該是(GLEW_OK!= glewInit())?由於GL_FALSE = GLEW_OK = GLEW_NO_ERROR。 – MasterOfBinary

+0

@nerdwacker:你說得對。 – datenwolf