void* SDL_LoadFunction(void* handle, const char* name)
handle | SDL_LoadObject()が戻した共有オブジェクト |
name | 検索する関数の名前 |
#include "SDL.h"
/* 変数を宣言する */
void* myHandle = NULL;
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_UnloadObject()を呼んだあとは無効となる.
この関数はCの関数の名前のみ検索できる. 他の言語ではコンパイラによって異なる対応で名前修飾(name mangling)される.
必ずライブラリの関数と同じ呼出規約で関数へのポインタを宣言すること. そうしないと, 不明な異常終了が発生する.
要求した関数が存在しない場合はNULLを戻す.