関数動的呼び出し機構 (funcman) の公開 API ヘッダー。
funcman は、テキスト設定ファイルから関数シンボルとライブラリ名を読み込み、 実行時に動的リンクで関数を解決するキャッシュ機構です。
使用方法:
c-modenization-kit sample team
1.0.0
2026/03/17
Copyright (C) CompanyName, Ltd. 2026. All rights reserved.
void *_funcman_get_func ( funcman_object *fobj )拡張関数ポインタを返します。この関数は内部用です。
既にロード済みの場合は即座に格納済みの関数ポインタを返します。
成功時 void * (関数ポインタ)、失敗時 NULL。
int funcman_is_declared_default ( funcman_object *fobj )funcman_object が明示的デフォルトかどうかを返します。
lib_name と func_name がともに定義ファイルで default に設定されている場合に 1 を返します。
それ以外の場合は 0 を返します。
明示的デフォルトの場合は 1、それ以外は 0。
void funcman_init ( funcman_object *const *fobj_array, const size_t fobj_length, const char *configpath )funcman_object ポインタ配列を初期化します。
必ず、constructor / DllMain コンテキストから呼ぶようにしてください。
void funcman_dispose ( funcman_object *const *fobj_array, const size_t fobj_length )funcman_object ポインタ配列を解放します。
必ず、destructor / DllMain コンテキストから呼ぶようにしてください。
int funcman_info ( funcman_object *const *fobj_array, const size_t fobj_length )funcman_object ポインタ配列の内容を標準出力に表示します。
すべてのエントリが正常に解決されている場合は 0、1 つでも失敗している場合は -1 を返します。
int get_lib_path ( char *out_path, const size_t out_path_sz, const void *func_addr )指定した関数が所属する共有ライブラリ (.so/.dll) の絶対パスを取得します。
関数が成功した場合、0 を返します。失敗した場合は 0 以外を返します。
int get_lib_basename ( char *out_basename, const size_t out_basename_sz, const void *func_addr )指定した関数が所属する共有ライブラリ (.so/.dll) の basename (パスなし・拡張子なし) を取得します。
Linux の .so.1.2.3 のようなバージョン付きは “.so.” より前を basename とみなします。
関数が成功した場合、0 を返します。失敗した場合は 0 以外を返します。
#define _GNU_SOURCE#define MODULE_HANDLE void *Linux/Windows 共通のモジュールハンドル型。
#define FUNCMAN_NAME_MAX 256lib_name / func_name 配列の最大長 (終端 ‘\0’ を含む)。
#define NEW_FUNCMAN_OBJECT ( key, type )
{(key), {0}, {0}, NULL, NULL, 0, 0, PTHREAD_MUTEX_INITIALIZER}funcman_object 静的変数の初期化マクロ。
#define funcman_get_func ( fobj, type )
((type)_funcman_get_func(fobj))拡張関数ポインタを返します。
struct funcman_object {
const char *func_key;
char[FUNCMAN_NAME_MAX] lib_name;
char[FUNCMAN_NAME_MAX] func_name;
MODULE_HANDLE handle;
void *func_ptr;
int resolved;
int padding;
pthread_mutex_t mutex;
}関数ポインタキャッシュエントリ。
ライブラリ名・関数名・ハンドル・関数ポインタおよび排他制御用ロックを管理します。
静的変数として定義する場合は NEW_FUNCMAN_OBJECT マクロで初期化してください。
const char *func_key;この関数インスタンスの識別キー。
char[FUNCMAN_NAME_MAX] lib_name;拡張子なしライブラリ名。[0]==‘\0’ = 未設定。
char[FUNCMAN_NAME_MAX] func_name;関数シンボル名。[0]==‘\0’ = 未設定。
MODULE_HANDLE handle;キャッシュ済みハンドル (NULL = 未ロード)。
void *func_ptr;キャッシュ済み関数ポインタ (NULL = 未取得)。
int resolved;解決済フラグ (0 = 未解決)。
int padding;パディング。
pthread_mutex_t mutex;ロード処理を保護する mutex (Linux)。