Euresys::EGenTL
Euresys::EGenTLは標準的なGenICam GenTLと同じ機能を提供するC++クラスのライブラリですが、よりユーザーフレンドリーなインターフェースを備えています。たとえば、 生のcharポインターの代わりに std::stringを使用しており、エラーコードは例外に変換されるようになっています。Euresys::EGenTLは、GenTLプロデューサーの検出と、それがエクスポートする関数の読み込みも可能です。
このライブラリはC++ヘッダーファイルで完全に実装されているため、関連するヘッダーファイルを含めるだけで利用することができます。
GenTLが定義する生の低レベルC関数の代わりに、GenTLプロデューサーを表す Euresys::EGenTLオブジェクトが得られます。
|
●
|
それぞれのGenTL関数は、Euresys::EGenTLのメンバーメソッドとして利用できます。GenTL関数名は大文字の接頭辞で始まりますが、Euresys::EGenTLの場合、メソッド名は同じ接頭辞に小文字を使用します。たとえば、GCReadPort関数は gcReadPortメソッドとして公開され、TLOpenInterface関数はtlOpenInterfaceメソッドとして公開されます。 |
|
●
|
すべてのGenTL関数は成功または失敗を示すGC_ERRORコードを返します。関数がGC_ERR_SUCCESS以外のコードを返すと、例外が発生するため、関数を呼び出した後に手動でエラーコードをチェックするという手間がありません。 |
|
●
|
GenTL関数はGC_ERRORを返すため、出力値は引数として渡されたポインターを通して返されます。Euresys::EGenTLメソッドはより自然なインターフェースを提供し、出力値を直接返します。 |
GenICam GenTL: GC_API TLGetNumInterfaces(TL_HANDLE hTL, uint32_t *piNumIfaces);
EGenTL:
uint32_t tlGetNumInterfaces(TL_HANDLE tlh);
GC_APIは、GC_IMPORT_EXPORT GC_ERROR GC_CALLTYPEとして定義されています。これは、呼び出し規則とDLLのインポート/エクスポート属性を設定されたGC_ERRORです。
|
●
|
テキストを処理するGenTL関数の場合、対応するEuresys::EGenTLメソッドによってchar *からstd::string、またはその逆に変換されます。 |
GenICam GenTL: GC_API TLGetInterfaceID(TL_HANDLE hTL, uint32_t iIndex, char *sID, size_t *piSize);
EGenTL: std::string tlGetInterfaceID(TL_HANDLE tlh, uint32_t index);
|
●
|
一部のGenTL関数は、カメラまたはフレームグラバーに関する情報を取得します。これらの関数はvoid *バッファーに値を入れ、INFO_DATATYPEに値の実際の型を示します。Euresys::EGenTLはこれらの関数を使いやすくするためにC++テンプレートを使用しています。 |
GenICam GenTL:
GC_API GCGetInfo(TL_INFO_CMD iInfoCmd, INFO_DATATYPE *piType,
void *pBuffer, size_t *piSize);
EGenTL:
template<typename T> T gcGetInfo(TL_INFO_CMD cmd);
最初の例
このプログラムは、Euresys::EGenTLを使用して、システムに存在するCoaxlinkカードを反復処理し、それらのIDを表示します。
#include <iostream>
#include <EGenTL.h> // 1
void listCards() {
Euresys::EGenTL gentl; // 2
GenTL::TL_HANDLE tl = gentl.tlOpen(); // 3
uint32_t numCards = gentl.tlGetNumInterfaces(tl); // 4
for (uint32_t n = 0; n < numCards; ++n) {
std::string id = gentl.tlGetInterfaceID(tl, n); // 5
std::cout << "[" << n << "] " << id << std::endl;
}
}
int main() {
try { // 6
listCards();
} catch (const std::exception &e) { // 6
std::cout << "error: " << e.what() << std::endl;
}
}
|
1.
|
Euresys::EGenTLクラスの定義を含むEGenTL.hを含めます。 |
|
2.
|
Euresys::EGenTLオブジェクトを作成します。これには以下のような操作が含まれます。 |
|
□
|
Coaxlink GenTLプロデューサー(coaxlink.cti)を見つけて動的に読み込みます。 |
|
□
|
coaxlink.ctiがエクスポートした関数へのポインターを取得し、Euresys::EGenTLメソッドを介して利用可能にします。 |
|
□
|
coaxlink.ctiを初期化します(GenTLの初期化関数GCInitLibを呼び出します)。 |
|
3.
|
GenTLプロデューサーを開きます。GenTL::TL_HANDLE型のハンドルが返されます。GenTL名前空間は標準的なGenTLヘッダーファイルで定義されており、このファイルは手順1でEGenTL.hによって自動的に実装されています。 |
|
6.
|
Euresys::EGenTLは例外を使用してエラーをレポートするため、コードをtry ... catchブロック内に包括します。 |
プログラムの出力例:
[0] PC1633 - Coaxlink Quad G3 (1-camera, line-scan) - KQG00014
[1] PC1632 - Coaxlink Quad (1-camera) - KQU00031
関連ファイル
include/EGenTL.h
|
メインヘッダー。その他すべてのヘッダーを含みます。Euresys::EGenTL を定義します。 |
include/GenTL_v1_5.h
|
標準GenTLヘッダー。標準の型、関数、および定数を定義します。 |
include/GenTL_v1_5_EuresysCustom.h
|
eGrabber固有の定数を定義します。 |