Euresys::EGenTL

Euresys::EGenTLは標準的なGenICam GenTLと同じ機能を提供するC++クラスのライブラリですが、よりユーザーフレンドリーなインターフェースを備えています。たとえば、 生のcharポインターの代わりに std::stringを使用しており、エラーコードは例外に変換されるようになっています。Euresys::EGenTLは、GenTLプロデューサーの検出と、それがエクスポートする関数の読み込みも可能です。

このライブラリはC++ヘッダーファイルで完全に実装されているため、関連するヘッダーファイル1を含めるだけで利用することができます。

                
                    #include <EGenTL.h>
                
            

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によって自動的に実装されています。
4. システムに存在するカード数を調べます。
5. n番目のカードのIDを取得します。
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固有の定数を定義します。