関数アドレステーブルから各関数アドレスを取り出し、関数アドレス変数に代入する。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
imagine
記事: 7
登録日時: 9年前

関数アドレステーブルから各関数アドレスを取り出し、関数アドレス変数に代入する。

#1

投稿記事 by imagine » 9年前

初めておじゃまします。
どうにも解決できないので 申し訳ありませんが、お尋ねします。

[件名]の通り、関数アドレステーブルには、引数の異なる関数のアドレスが入っており、 これをそれぞれの関数アドレス変数に代入したいのですがコンパイルエラーになってしまいます。

// 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 (関数アドレスを取り出し、変数に入れたい)


色々キャストしてみたのですが解決できません。 どうぞ宜しくお願いいたします。

ISLe
記事: 2650
登録日時: 14年前
連絡を取る:

Re: 関数アドレステーブルから各関数アドレスを取り出し、関数アドレス変数に代入する。

#2

投稿記事 by ISLe » 9年前

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];

imagine
記事: 7
登録日時: 9年前

Re: 関数アドレステーブルから各関数アドレスを取り出し、関数アドレス変数に代入する。

#3

投稿記事 by imagine » 9年前

ありがとうございました。  解決しました。
長くやっていても知らないことばかりで、助かりました。

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] );

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: 関数アドレステーブルから各関数アドレスを取り出し、関数アドレス変数に代入する。

#4

投稿記事 by みけCAT » 9年前

解決したのでしたら、解決チェックをお願いします。
解決チェックをするには、投稿画面の「送信」ボタンの右側にある「解決!」にチェックを入れた状態で返信を投稿してください。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

imagine
記事: 7
登録日時: 9年前

Re: 関数アドレステーブルから各関数アドレスを取り出し、関数アドレス変数に代入する。

#5

投稿記事 by imagine » 9年前

申し訳ありません。
[クイック返信]で行なったため、[解決]のチェックがありませんでした。

閉鎖

“C言語何でも質問掲示板” へ戻る