
#include <twl/el.h>typedef u32 ELDlld;void* EL_GetGlobalAdr( ELDlld my_dlld, const char* ent_name );
| my_dlld | シンボルの検索対象とする動的モジュール |
| ent_name | アドレスを得たいシンボルの名前 |
指定した動的モジュール内に指定したシンボルが見つかった場合は、そのシンボルのアドレスを返します。
見つからなかった場合には、0 を返します。
指定動的モジュールから指定文字列に該当するシンボルのアドレスを返します。
(引数 my_dlld に 0 を指定した場合は、リンクを試みた全ての動的モジュールを検索対象にします)
静的モジュール側から動的モジュールの関数を呼び出したい場合などは、本関数で対象の関数のアドレスを得た後に、
関数ポインタとして関数を呼び出すことになります。
静的モジュール側から動的モジュールのシンボルを参照する際にはポインタが使われ、コンパイル時に型チェックが
行われませんので、動的モジュールのヘッダファイルを確認し、本関数の返り値が正しい型のポインタに代入される
ようにするなど、正しい型を確認できるようにしてください。
(例)動的モジュールのu16型変数を参照する。
u16* dll_data_p;
dll_data_p = (u16*)EL_GetGlobalAdr( dlld, "dll_data");
OS_TPrintf( "dll_data:%d\n", *dll_data_p);
(例)動的モジュールの関数を呼び出す。
typedef void (*dllfunc)( u16 a)
dllfunc dll_func1;
dll_func1 = (dllfunc)EL_GetGlobalAdr( dlld, "dll_func1");
dll_func1( 0x1234);
2008/07/11 ELDlldを追加
2007/08/21 初版