SDL_mainを定義せずにSDL関数を使用しています。大丈夫ですか?

マット・サルメント

それが私のコードです:

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をコンパイルします。正常に動作し、ウィンドウが表示されます。

しかし、本当に大丈夫ですか?私がそれをすることで失った機能は何ですか?

jaggedSpire

SDL_mainSDLの自動初期化とクリーンアップ用です。それはあなたがそれを手動で行う必要はありませんので、それはまた、適切にそれがコンパイルのプラットフォーム上のウィンドウのアプリケーションのためにすべてを設定するための努力を通過するものの、ほとんどだが、それの罰金#defineマクロSDL_MAIN_HANDLEDの前に#includeSDL.hをINGの、その意志SDLがmainマクロに変換されSDL_mainないようにする単に、独自のコード内でSDLを適切に初期化して終了するようにしてください。

必要な初期化が正しく行われていることを確認したい場合は、ソースコード確認して、そこにあるものをエミュレートするだけです。

編集:

一部のプラットフォームでは、を使用しないとSDL_Initが失敗しますSDL_mainSDL_SetMainReadybeforeを呼び出すことでこの失敗を無効にできますが、これによりSDL_InitSDLのエラー処理が無効になり、呼び出し後にSDLを不適切に初期化SDL_SetMainReadyすると、最も明確なエラーメッセージが表示されないことに注意してください。

SDLの終了ははるかに簡単です(SDL_mainを使用していない場合も実行する必要があります)。

SDL_QuitSDLが終了したら、電話するだけです。これにより、現在アクティブなSDLサブシステムが適切に閉じられます。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

完全に一般的なswap()関数を定義しても大丈夫ですか?

分類Dev

完全に一般的なswap()関数を定義しても大丈夫ですか?

分類Dev

完全に一般的なswap()関数を定義しても大丈夫ですか?

分類Dev

fclose()を使用せずにFILE *を再割り当てしても大丈夫ですか?

分類Dev

"。にいる" ?「.in」を生成せずに記述しても大丈夫ですか?

分類Dev

次の配列を初期化せずに使用しても大丈夫ですか?

分類Dev

多くの匿名関数を使用しても大丈夫ですか?

分類Dev

関数型のようにchar *を使用しても大丈夫ですか?

分類Dev

ユーザー定義関数でユーザーから入力を取得しても大丈夫ですか?

分類Dev

Androidで同じIDを定義しても大丈夫ですか?

分類Dev

関数からCComPtrを返しても大丈夫ですか?

分類Dev

まだ定義されていないプロパティの変数の設定を解除しても大丈夫ですか?

分類Dev

boost :: threadsからstd :: this_thread *関数を使用しても大丈夫ですか?

分類Dev

「var =」なしで変数を使用しても大丈夫ですか?

分類Dev

Python-自己を外部関数に渡しても大丈夫ですか

分類Dev

Bean関数内に直接値を挿入しても大丈夫ですか?

分類Dev

新しい特性を定義せずに、後置表記を使用してRustで関数を呼び出す方法はありますか?

分類Dev

HTML5で独自のタグを定義しても大丈夫ですか?

分類Dev

チャンネルを開いたままにしても大丈夫ですか?

分類Dev

PHP、DIに特性を使用しても大丈夫ですか?

分類Dev

常に高いAPIレベルを使用しても大丈夫ですか?

分類Dev

変数をインポートして関数内で使用しても大丈夫ですか?

分類Dev

LinuxでSDL2をg ++で使用していますか?

分類Dev

Reactステートレスコンポーネント内で関数を定義しても大丈夫ですか?

分類Dev

異なるファイルで同じ名前の静的インライン関数を定義しても大丈夫ですか?

分類Dev

TSで未定義を無効にキャストしても大丈夫ですか?

分類Dev

Haskell:再帰的にmainを呼び出しても大丈夫ですか?

分類Dev

副作用関数を呼び出すためにuseEffectの代わりにuseMemoを使用しても大丈夫です

分類Dev

「Navigate()」を待たずに呼び出しても大丈夫ですか?

Related 関連記事

  1. 1

    完全に一般的なswap()関数を定義しても大丈夫ですか?

  2. 2

    完全に一般的なswap()関数を定義しても大丈夫ですか?

  3. 3

    完全に一般的なswap()関数を定義しても大丈夫ですか?

  4. 4

    fclose()を使用せずにFILE *を再割り当てしても大丈夫ですか?

  5. 5

    "。にいる" ?「.in」を生成せずに記述しても大丈夫ですか?

  6. 6

    次の配列を初期化せずに使用しても大丈夫ですか?

  7. 7

    多くの匿名関数を使用しても大丈夫ですか?

  8. 8

    関数型のようにchar *を使用しても大丈夫ですか?

  9. 9

    ユーザー定義関数でユーザーから入力を取得しても大丈夫ですか?

  10. 10

    Androidで同じIDを定義しても大丈夫ですか?

  11. 11

    関数からCComPtrを返しても大丈夫ですか?

  12. 12

    まだ定義されていないプロパティの変数の設定を解除しても大丈夫ですか?

  13. 13

    boost :: threadsからstd :: this_thread *関数を使用しても大丈夫ですか?

  14. 14

    「var =」なしで変数を使用しても大丈夫ですか?

  15. 15

    Python-自己を外部関数に渡しても大丈夫ですか

  16. 16

    Bean関数内に直接値を挿入しても大丈夫ですか?

  17. 17

    新しい特性を定義せずに、後置表記を使用してRustで関数を呼び出す方法はありますか?

  18. 18

    HTML5で独自のタグを定義しても大丈夫ですか?

  19. 19

    チャンネルを開いたままにしても大丈夫ですか?

  20. 20

    PHP、DIに特性を使用しても大丈夫ですか?

  21. 21

    常に高いAPIレベルを使用しても大丈夫ですか?

  22. 22

    変数をインポートして関数内で使用しても大丈夫ですか?

  23. 23

    LinuxでSDL2をg ++で使用していますか?

  24. 24

    Reactステートレスコンポーネント内で関数を定義しても大丈夫ですか?

  25. 25

    異なるファイルで同じ名前の静的インライン関数を定義しても大丈夫ですか?

  26. 26

    TSで未定義を無効にキャストしても大丈夫ですか?

  27. 27

    Haskell:再帰的にmainを呼び出しても大丈夫ですか?

  28. 28

    副作用関数を呼び出すためにuseEffectの代わりにuseMemoを使用しても大丈夫です

  29. 29

    「Navigate()」を待たずに呼び出しても大丈夫ですか?

ホットタグ

アーカイブ