void* SDL_LoadFunction(void* handle, const char* name)
handle | SDL_LoadObject()が戻した共有オブジェクト |
name | 検索する関数の名前 |
#include "SDL_loadso.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)される.
必ずライブラリの関数と同じ呼出規約で関数へのポインタを宣言すること. そうしないと, 不明な異常終了が発生する.