2014-11-22 36 views
0

我用SDL和OpenGL製作了一些軟件,現在我想添加一個用於輸入的圖形界面,就像一些文本框和按鈕一樣。我意識到,這可能必須在一個單獨的窗口中,我不介意,但我不知道如何將Win32功能納入我的項目。我試圖從如何將Win32整合到SDL項目中?

int main(int argc, char **argv) 
{ 
    ... 
} 

改變我的主要功能的定義

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE prevInstance, LPSTR lpCmdLine, int cmdShow) 
{ 
    ... 
} 

但我得到一個錯誤,即說:

LNK2005: [email protected] already defined in SDL2main.lib (SDL_windows_main.obj) 
LNK2005: [email protected] already defined in Source.obj 
LNK2019: unresolved external symbol _SDL_main referenced in function _main 

我使用Visual Studio 2012 是有辦法解決這個問題,還是有另一種方法來創建C++的形式?

由於

+0

GUI不必位於單獨的窗口中。你只需要可以呈現給opengl的小部件。有gui庫這樣做。 – 2014-11-22 22:09:57

回答

2

SDL main定義爲宏。這就像最終的恐怖表演。當然,將微軟的WinMain混合到這似乎是合適的,但它並不需要任何東西。

而只是保留您的main

如果我已經承諾使用SDL(考慮到上述情況,我永遠不會這樣做),那麼我首先會檢查SDL以文本框和按鈕等方式提供的內容。如果沒有,則只需包含<windows.h>(首先定義STRICTNOMINMAXUNICODE),然後使用該API。但爲此,我建議先創建一些純API程序來學習該API,而不要干擾SDL。

+0

爲了擴展這個 - 因爲看起來'WinMain'已經被庫定義了,你可以繼續使用'main'。如果您不想使用控制檯,只需更改您的可執行輸出類型(在項目鏈接器設置下)。 – 2014-11-22 21:53:23

+0

'use main'是什麼意思?如果我使用我現有的主函數,我怎麼能有Win32功能,我會從哪裏得到我的實例和東西? – 2014-11-22 22:04:29

+1

@HarWiltz:實例句柄大多隻需要資源。如果你有資源,調用'GetModuleHandle(0)'檢索當前可執行文件的實例句柄。將它傳遞給一個DLL名稱以獲取某個加載的DLL的實例句柄。詢問新的SO問題以解決新問題。 SO評論旨在不支持討論,所以你可以想象一個教程有點超出了設計限制。 – 2014-11-22 22:08:14

相關問題