「ライブラリ(API)の作り方」の版間の差分
(→ライブラリ(API)のコンパイル) |
|||
行26: | 行26: | ||
なお、これに関連した[[Small Tools]]やライブラリ([[API]])があった場合はそちらも再コンパイルする必要があります。 | なお、これに関連した[[Small Tools]]やライブラリ([[API]])があった場合はそちらも再コンパイルする必要があります。 | ||
<br><br> | <br><br> | ||
+ | |||
+ | == ライブラリの実装 == | ||
+ | 実装する際にいくつかの気をつけなければならない点を示します。 | ||
+ | |||
+ | === 関数の基本的な書き方 === | ||
+ | 機能に応じて関数名や引数名は自由に付けることができます。しかし、関数名や引数名を見ただけで概ねの機能や役割が分かるような命名をしておけば、後々他の関数から呼び出す際にも再利用しやすくなります。関数名や引数の付け方に困ったときは、既にコーディングされた他の関数を参考にすることも有効な手段です。以降、既にコーディングされたヘッダやソースファイルを例として関数の書き方や引数の付け方について解説します。 | ||
+ | |||
+ | ==== 引数 ==== | ||
+ | APIで実装する関数の多くは基本的に設定データを元に入力ファイルを処理し、それを出力ファイルへ格納する流れとなっています。特別な場合を除き、入力ファイルを直接書き換えたり、出力ファイルからデータを読み出したりすることはありません。また、このときの設定データはすでにファイルから読み出したデータで構造体として取り扱っています。 | ||
+ | |||
+ | ===== 例1. lmrcImageSingleROI ===== | ||
+ | [[lmrcImageROI2D(API)]]内の関数lmrcImageSingleROIを例としてみます。 | ||
+ | extern void lmrcImageSingleROI(mrcImage* out, mrcImage* in, lmrcImageSingleROIInfo* linfo, int mode); | ||
+ | |||
+ | これは入力画像から切り出して出力画像とすつ関数で、入力も出力もmrcImageデータです。<br> | ||
+ | 見ての通り引数のうちinが入力で、outが出力となっており、引数の入出力がすぐに判別できます。<br> | ||
+ | <br> | ||
+ | オプションから入力された設定データなどはlinfoのメンバとして下記のように格納されています。<br> | ||
+ | <br> | ||
+ | typedef struct lmrcImageSingleROIInfo { | ||
+ | char* FileName; | ||
+ | lmrcImageROIShape Shape; | ||
+ | float centerx; /* For All Shape */ | ||
+ | float centery; | ||
+ | float blx; /* For Rect, Rect2, Circle */ | ||
+ | float bly; | ||
+ | |||
+ | -中略- | ||
+ | |||
+ | float truePitch; | ||
+ | float Ly; | ||
+ | float dY; | ||
+ | } lmrcImageSingleROIInfo; | ||
+ | |||
+ | 最後にmodeという引数がありますが、これは多く場合でコマンドのオプション(-m)の値に相当し、モードによって大きく動作を分けたいがために敢えてlinfoから独立した引数として取り扱っています。 |
2014年10月3日 (金) 08:33時点における版
ここでは、オブジェクト指向型ライブラリ(API)の開発方法を説明します。ここで重要な役割を果たすのは、makeobjとprotoObjectMethodCreateになります。これらによりある一定の規約に基づいたライブラリが提供されます。
目次
ライブラリ(API)を開発するディレクトリの作成方法
まず、開発を行うディレクトリを作成します。
$ maketobj ClassName ToolName new
を実行すると、$EOS_HOME/src/Tools/ClassName/ToolName のディレクトリが作られます。
その下には、src, inc, Config, docのディレクトリができあがります。
ヘッダファイル、ソースファイルの作成
まず、作成したディレクトリ下(incやsrc)でprotoObjectMethodCreateを使用し、ヘッダファイルやソースファイルのプロトタイプを作成します。
ライブラリ(API)のコンパイル
以下のコマンドでライブラリ(API)のソースコードをコンパイルして実行可能なライブラリへ変換します。
$ make check $ make depend $ make clean $ make $ make install
なお、これに関連したSmall Toolsやライブラリ(API)があった場合はそちらも再コンパイルする必要があります。
ライブラリの実装
実装する際にいくつかの気をつけなければならない点を示します。
関数の基本的な書き方
機能に応じて関数名や引数名は自由に付けることができます。しかし、関数名や引数名を見ただけで概ねの機能や役割が分かるような命名をしておけば、後々他の関数から呼び出す際にも再利用しやすくなります。関数名や引数の付け方に困ったときは、既にコーディングされた他の関数を参考にすることも有効な手段です。以降、既にコーディングされたヘッダやソースファイルを例として関数の書き方や引数の付け方について解説します。
引数
APIで実装する関数の多くは基本的に設定データを元に入力ファイルを処理し、それを出力ファイルへ格納する流れとなっています。特別な場合を除き、入力ファイルを直接書き換えたり、出力ファイルからデータを読み出したりすることはありません。また、このときの設定データはすでにファイルから読み出したデータで構造体として取り扱っています。
例1. lmrcImageSingleROI
lmrcImageROI2D(API)内の関数lmrcImageSingleROIを例としてみます。
extern void lmrcImageSingleROI(mrcImage* out, mrcImage* in, lmrcImageSingleROIInfo* linfo, int mode);
これは入力画像から切り出して出力画像とすつ関数で、入力も出力もmrcImageデータです。
見ての通り引数のうちinが入力で、outが出力となっており、引数の入出力がすぐに判別できます。
オプションから入力された設定データなどはlinfoのメンバとして下記のように格納されています。
typedef struct lmrcImageSingleROIInfo { char* FileName; lmrcImageROIShape Shape; float centerx; /* For All Shape */ float centery; float blx; /* For Rect, Rect2, Circle */ float bly; -中略- float truePitch; float Ly; float dY; } lmrcImageSingleROIInfo;
最後にmodeという引数がありますが、これは多く場合でコマンドのオプション(-m)の値に相当し、モードによって大きく動作を分けたいがために敢えてlinfoから独立した引数として取り扱っています。