目次 - SDL 3.0 API(機能別) - 共有オブジェクト読込と関数検索 - SDL_LoadFunction

SDL_LoadFunction

共有オブジェクトから名前で関数のアドレスを検索しそれを戻す

ヘッダ

SDL3/SDL_loadso.h

構文

SDL_FunctionPointer SDL_LoadFunction(SDL_SharedObject *handle, const char *name);

引数

SDL_SharedObject *handleSDL_LoadObject()が戻した共有オブジェクト
const char *name検索する関数の名前

戻り値

(SDL_FunctionPointer) 関数へのポインタを戻す. 失敗のときNULLを戻す. SDL_GetError()で詳細を知ることができる.

詳細

関数へのポインタはSDL_UnloadObject()を呼んだあとは無効となる.

この関数はCの関数の名前のみ検索できる. 他の言語ではコンパイラによって異なる対応で名前修飾(name mangling)される.

必ずライブラリの関数と同じ呼出規約で関数へのポインタを宣言すること. そうしないと, 不明な異常終了が発生する.

要求した関数が存在しない場合はNULLを戻す.

スレッドセーフ

この関数を呼べるのはメインスレッドのみである.

バージョン

SDL 3.2.0以降

サンプルコード

/* 変数を宣言する */
SDL_SharedObject* myHandle = NULL;
const char* myFunctionName = "myFancyFunction";
void (*myFancyFunction)(int anInt);

/* mylib.soを動的に読み込む */
myHandle = SDL_LoadObject("mylib.so");

/* mylib.soからエクスポートされた関数を読み込む
 * エクスポートされた関数のプロトタイプは次のようであるとする
 * void myFancyFunction(int anInt);
 */
myFancyFunction = (void (*)(int))SDL_LoadFunction(myHandle, myFunctionName);

/* myFancyFunctionに適当な値を渡す */
if (myFancyFunction != NULL) {
    myFancyFunction(15);
} else {
    /* ここでエラー処理を行う */
}

関連項目

SDL Wikiへのリンク

SDL_LoadFunction - SDL Wiki