2011-04-20 64 views
2

正如標題所暗示的,我試圖在使用DevIL將圖像傳遞給OpenGL之前加載圖像。我使用這段代碼差錯控制在C++中使用DevIL和OpenGL加載圖像

const char* filename = "back.bmp"; 

if (!ilLoadImage(filename)) 
{ 
    throw runtime_error(std::string("Unable to load image") +filename); 
} 

其中,對if語句,返回錯誤

error C2664: 'ilLoadImage' : cannot convert parameter 1 from 'const char *' to 'const wchar_t *' 

如果我定義filenameconst wchar_t* filename,我得到的錯誤

error C2664: 'ilLoadImage' : cannot convert parameter 1 from 'const char *' to 'const wchar_t *' 

因此,現在我不會因爲我對[文件名] .bmp文件的類型爲wchar_t *或wchar_t是什麼的好奇而厭倦您,Google會讓我困惑,我只會問wha我必須讓它工作:爲什麼它不起作用?我錯過了什麼?我相信肯定會有一個很短的解決方案。它看起來就像那種錯誤。

謝謝。

回答

4

如果您使用Unicode功能,則必須使用Unicode文本。具體來說,L將返回靜態文本的寬字符表示:

ilLoadImage(L"back.bmp"); 

如果你對ANSI和寬字符串編譯代碼,使用_T()相反,它返回正確的字符串類型:

ilLoadImage(_T("back.bmp")); 

如果您處於後一種情況,並且不知道在編譯時需要使用哪種類型的char,請使用TCHAR,它可以是CHARWCHAR,具體取決於是否定義了UNICODE

0

如果您使用Visual Studio,請嘗試更改項目以使用多字節字符集。

+0

這擺脫了錯誤,但現在我得到了大量的鏈接器錯誤,可能會或可能不會有關於我與項目混亂的事情。除非我錯過了一些東西,我所有的依賴關係都沒問題,我的文件應該是......沒有意義...... – OddCore 2011-04-21 09:16:25

+1

然後,你應該打開另一個問題,詳細錯誤。 DevIL有兩套庫,一套是unicode兼容的,一套不是。確保你使用正確的。如果將項目設置爲多字節,則使用unicode不兼容的項目 – Dikei 2011-04-21 10:09:01