言語マクロ

<< 目次を表示 >>

ページ位置:  ソースコードの生成と読み込み > ソースコードの生成と読み込みに関する設定 >

言語マクロ

C++言語でリバースエンジニアリングを行うときには、プリプロセッサ用の命令がコード中に散在する場合が多くあります。これによりコード管理が簡単になる一方、言語の解析には邪魔になります。

 

この問題に対処するために、マクロを定義できます。この定義されたマクロはリバースエンジニアリングの解析中には無視されます。

 

可能であれば、このマクロをプリプロセッサによって最初に展開しておくと複雑なマクロ定義があっても解析しやすくなります。こういった機能がない場合には、このマクロの定義機能を利用してください。

 

 

利用手順:

リボン

プロジェクト > リファレンス情報 > 設定 > プログラム言語のマクロ

 

 

手順:  

#

操作方法

1

上記利用手順を実行します。プログラム言語のマクロダイアログが表示されます。

2

追加 ボタンを押して下さい。

3

マクロについての詳細を入力してください。

4

OK ボタンを押してください。

 

項目

説明

宣言の中に含まれているマクロ

マクロは、場合によってはクラスやそのメソッドの宣言に含まれている場合があります。以下がその例です。

 

class __declspec Hoge

{

int __declspec Fuga(int p);

};

 

もし、declspecが上記で述べているようにC++のマクロとして定義されていれば、読み込まれるクラスや操作には、タグ付き値としてDeclMacro1が定義され、値は__declspecになります。さらに複数のマクロが定義されている場合には、DeclMacro2, DeclMacro3等のタグ付き値に保存されます。

コード生成時には、これらのタグ付き値の情報を利用することでコードに反映できます。

複雑なマクロが定義されている場合

時々、マクロは複数行にわたって複雑に定義されている場合もあります。

EAでは、この様な場合には、ルールを定義することで無視できます。

このルールの定義例は次のようになります。

 

ブロックマクロ

BEGIN_INTERFACE_PART ^ END_INTERFACE_PART

 

ここで^のマークがマクロの本体を意味します。この機能を利用することで、あるマクロから別のマクロまでの間を無視できます。

注意:

^のマークの前後にはスペースが必要です。

 

関数マクロ

RTTI_EMULATION()

 

このようにマクロを定義すると、Enterprise Architectでは括弧内の情報をすべて無視するようになります。

 

関数マクロは関数の本体を含むこともできます。:

    RTTI_EMULATION() {}

 

この例では、Enterprise Architectは括弧内のすべての内容は無視します。関数マクロに本体がある場合、ブロックマクロと連携させることはできません。

 

注意:

マクロとして定義した内容は別のプロジェクトにコピーできます。リファレンス情報の出力 および リファレンス情報の読込みの機能を利用して下さい。