初めておじゃまします。
どうにも解決できないので 申し訳ありませんが、お尋ねします。
[件名]の通り、関数アドレステーブルには、引数の異なる関数のアドレスが入っており、 これをそれぞれの関数アドレス変数に代入したいのですがコンパイルエラーになってしまいます。
// BIOS_Table::関数アドレステーブル
// +0:引数が、1つの関数アドレス
// +1:引数が、2つの関数アドレス
// BIOS_00 : 引数が、1つの関数アドレス変数
// BIOS_01 : 引数が、2つの関数アドレス変数
int (*BIOS_Table) [];
int (*BIOS_00) (int);
int (*BIOS_01) (int,int);
BIOS_Table = (void*) swi0x00_function(); //関数アドレステーブルを返すfunction
BIOS_00 = BIOS_Table[0]; <<<< error (関数アドレスを取り出し、変数に入れたい)
BIOS_01 = BIOS_Table[1]; <<<< error (関数アドレスを取り出し、変数に入れたい)
色々キャストしてみたのですが解決できません。 どうぞ宜しくお願いいたします。
関数アドレステーブルから各関数アドレスを取り出し、関数アドレス変数に代入する。
Re: 関数アドレステーブルから各関数アドレスを取り出し、関数アドレス変数に代入する。
typedefを使うと難しく考えなくて済むと思います。
typedef int (*BIOS_00_PTR) (int);
typedef int (*BIOS_01_PTR) (int,int);
BIOS_00_PTR BIOS_00;
BIOS_01_PTR BIOS_01;
(略)
BIOS_00 = (BIOS_00_PTR)BIOS_Table[0];
BIOS_01 = (BIOS_01_PTR)BIOS_Table[1];
typedef int (*BIOS_00_PTR) (int);
typedef int (*BIOS_01_PTR) (int,int);
BIOS_00_PTR BIOS_00;
BIOS_01_PTR BIOS_01;
(略)
BIOS_00 = (BIOS_00_PTR)BIOS_Table[0];
BIOS_01 = (BIOS_01_PTR)BIOS_Table[1];
Re: 関数アドレステーブルから各関数アドレスを取り出し、関数アドレス変数に代入する。
ありがとうございました。 解決しました。
長くやっていても知らないことばかりで、助かりました。
typedef int (*BIOS_00_PTR) (int);
typedef int (*BIOS_01_PTR) (int,int);
typedef int (*BIOS_02_PTR) (int,int,int);
typedef int (*BIOS_03_PTR) (int,int,int,int);
ENTRY uint32_t* BIOS_Table;
ENTRY BIOS_00_PTR BIOS_00;
ENTRY BIOS_01_PTR BIOS_01;
ENTRY BIOS_02_PTR BIOS_02;
ENTRY BIOS_03_PTR BIOS_03;
BIOS_Table = (void*) swi0x00_function();
BIOS_00 = (BIOS_00_PTR) ( BIOS_Table[0] );
BIOS_01 = (BIOS_01_PTR) ( BIOS_Table[1] );
BIOS_02 = (BIOS_02_PTR) ( BIOS_Table[2] );
BIOS_03 = (BIOS_03_PTR) ( BIOS_Table[3] );
長くやっていても知らないことばかりで、助かりました。
typedef int (*BIOS_00_PTR) (int);
typedef int (*BIOS_01_PTR) (int,int);
typedef int (*BIOS_02_PTR) (int,int,int);
typedef int (*BIOS_03_PTR) (int,int,int,int);
ENTRY uint32_t* BIOS_Table;
ENTRY BIOS_00_PTR BIOS_00;
ENTRY BIOS_01_PTR BIOS_01;
ENTRY BIOS_02_PTR BIOS_02;
ENTRY BIOS_03_PTR BIOS_03;
BIOS_Table = (void*) swi0x00_function();
BIOS_00 = (BIOS_00_PTR) ( BIOS_Table[0] );
BIOS_01 = (BIOS_01_PTR) ( BIOS_Table[1] );
BIOS_02 = (BIOS_02_PTR) ( BIOS_Table[2] );
BIOS_03 = (BIOS_03_PTR) ( BIOS_Table[3] );
Re: 関数アドレステーブルから各関数アドレスを取り出し、関数アドレス変数に代入する。
解決したのでしたら、解決チェックをお願いします。
解決チェックをするには、投稿画面の「送信」ボタンの右側にある「解決!」にチェックを入れた状態で返信を投稿してください。
解決チェックをするには、投稿画面の「送信」ボタンの右側にある「解決!」にチェックを入れた状態で返信を投稿してください。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: 関数アドレステーブルから各関数アドレスを取り出し、関数アドレス変数に代入する。
申し訳ありません。
[クイック返信]で行なったため、[解決]のチェックがありませんでした。
[クイック返信]で行なったため、[解決]のチェックがありませんでした。