2016-11-16 36 views
0

我在尋找可能使用我自己的私人語言的SDL2。他們可以與動態庫(如SDL2.dll)交談,以便可行。但首先我需要使用C來試用它。我是否需要SDL的main()函數?

但是,hello-world樣式的教程很難實現(它們針對的是SDL的錯誤版本,或者是C++或其他)。最後,我把一個最低限度的程序放在一起(只是#include「sdl.h」和main(){}會顯示這個問題),並且我不能鏈接,因爲我沒有main()或WinMain()。

我知道SDL.h或其他標題重新定義了我的'main',因爲它想要使用它自己的main()例程。這大概存在於SDL的靜態鏈接庫中,因爲它不能在SDL2.dll中。我沒有這個庫,看不到任何一點,因爲我不能用我自己的語言來使用它(它也將是特定於實現的,甚至作爲源代碼來使用,在這種情況下忘記它!)。

我設法通過添加'#undef main'來獲得一個基本的測試程序。

但是,我的問題是,SDL的main()中是否有必要,或者將來可能會咬我?或者我可以離開它嗎? (爲什麼SDL不僅僅依賴於某些SDL_init()函數來調用我的main()?)

(我向SDL論壇註冊以詢問這個問題,但顯然他們不允許我因爲我沒有正確的權限,所以註冊點是什麼?!)

+0

請參閱:http://stackoverflow.com/questions/11976084/why-sdl-defines-main-macro – Fang

+0

謝謝。這最終導致建議查看源文件中的'SDL_main.c',這告訴我,除了與命令行解析有關的東西外,它會調用SDL_SetMainReady()。這就是如果它是正確的版本,但SDL2.dll中有這樣的功能,所以如果遇到問題,我可以嘗試調用它。 – bartc

回答

0

而不是#undef main你應該在包括SDL.h(或通過編譯器標誌定義它)之前#define SDL_MAIN_HANDLED

如果你實現自定義主功能,你至少應該撥打SDL_SetMainReady。對於某些平臺,SDL執行額外的操作,例如設置特定的異常處理程序,將參數轉換爲UTF8,或者完全不同的東西(例如,對於android而言它並不是一個主要的JNI函數)。

SDL在SDL2main庫中定義的入口點並不真正瞭解你做了什麼「沒有它」(除了手動刪除它)。您可以隨時從libsdl.org下載歸檔文件或自行構建它。

相關問題