それが私のコードです:
Lib.h
#ifdef ExportLib
#define Lib __declspec(dllexport)
#else
#define Lib __declspec(dllimport)
#endif
extern void Lib Launch();
Lib.cpp
#include <SDL/SDL.h>
#include "Lib.h"
void Launch() {
SDL_Init(SDL_INIT_EVERYTHING);
SDL_Window* win = SDL_CreateWindow("Untitle", 100, 100, 400, 400, 0);
SDL_DestroyWindow(win);
SDL_Quit();
}
このコードを静的ライブラリにビルドします。次に、新しいソースファイルを作成し、このライブラリを使用しました。
main.cpp
#include "Lib.h"
int main() {
Launch();
return 0;
}
最後に、SDL_mainとSDLの依存関係を定義せずに、静的ライブラリを使用してmain.cppをコンパイルします。正常に動作し、ウィンドウが表示されます。
しかし、本当に大丈夫ですか?私がそれをすることで失った機能は何ですか?
SDL_main
SDLの自動初期化とクリーンアップ用です。それはあなたがそれを手動で行う必要はありませんので、それはまた、適切にそれがコンパイルのプラットフォーム上のウィンドウのアプリケーションのためにすべてを設定するための努力を通過するものの、ほとんどだが、それの罰金に#define
マクロSDL_MAIN_HANDLED
の前に#include
SDL.hをINGの、その意志SDLがmain
マクロに変換されSDL_main
ないようにする単に、独自のコード内でSDLを適切に初期化して終了するようにしてください。
必要な初期化が正しく行われていることを確認したい場合は、ソースコードを確認して、そこにあるものをエミュレートするだけです。
編集:
一部のプラットフォームでは、を使用しないとSDL_Initが失敗しますSDL_main
。SDL_SetMainReady
beforeを呼び出すことでこの失敗を無効にできますが、これによりSDL_Init
SDLのエラー処理が無効になり、呼び出し後にSDLを不適切に初期化SDL_SetMainReady
すると、最も明確なエラーメッセージが表示されないことに注意してください。
SDLの終了ははるかに簡単です(SDL_mainを使用していない場合も実行する必要があります)。
SDL_Quit
SDLが終了したら、電話するだけです。これにより、現在アクティブなSDLサブシステムが適切に閉じられます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加