| サイトマップ | |
||
GWB plug-in の機能は、ダイナミックリンク・ライブラリ (DLL) として実装されます。C++ ではヘッダファイル GWBplugin.h に含まれる GWBplugin ラッパークラスと、GWBplugin.dll への出力ライブラリ GWBplugin.lib が提供されます。
このページでは、本プラグインの C++ バージョンの使用に関する一般的な質問にお答えします。なお、ここで紹介する内容を実行するには、GWB バージョン 9.0.2 以降が必要となります。
GWB プラグインは、Micorosoft、Intel および GCC の C++ コンパイラで動作確認がとられています。プログラムにリンクさせるライブラリとヘッダファイルは、c:¥Program Files¥GWB¥src
ディレクトリにインストールされます。ヘッダファイルは GWBplugin.h、リンクするライブラリは GWBplugin.lib です。チュートリアルとサンプルにしたがって、コンパイル環境とサンプルプログラムを実行して下さい (Visual Studio コマンドライン、Visual Studio、MinGW/MSYS/g++ のチュートリアルがあります) 。
// GWBplugin.h #define ANULL -999999.0 // marker for an undefined value class GWBplugin { public: GWBplugin(); ~GWBplugin(); int initialize(const char* app_name, const char* file_name = NULL, const char* cmds = NULL); int exec_cmd(char* uline); int results(void* data, const char* value, const char* units = NULL , int ix = 0 , int jy = 0); };
まずはじめに "GWBplugin
" オブジェクトのインスタンスを作成する必要があります。次に、 "initialize
" 関数を使用して、アプリケーションの名称、出力データを書き出すオプションのファイル名、その他のコマンドラインタイプの引数を渡して関心のある GWB アプリケーションをスタートします。
int initialize( const char* app_name, const char* file_name = NULL, const char* cmds = NULL );
app_name | 使用したい GWB アプリケーションの名称が含まれる文字列。rxn, spece8, react, x1t, x2t のいずれかを選択可能。 | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
file_name [オプション] | GWB アプリケーションに出力させたいファイルの名称が含まれる文字列。出力結果をファイルに書き出さない場合は、NULL 又は空白にすることも可能。 | ||||||||||
cmds [オプション] | アプリケーションをコマンドラインから実行する際に通常渡すコマンドラインオプションが含まれる文字列。NULL 又は空白文字列にすることも可能。 | ||||||||||
コマンドライン・オプション:
|
#include "GWBplugin.h" ... GWBplugin myPlugin; ... // plug-in SpecE8 with no output written and no options int success = myPlugin.initialize("spece8"); ... // plug-in React with output written to output.txt and no options int success = myPlugin.initialize("react","output.txt"); ... // plug-in X1t with no output written, no working directory change, // and read input from pb_contam.x1t int success = myPlugin.initialize("x1t",NULL, "-nocd -i \"c:/program files (x86)/gwb/script/pb_contam.x1t\"");
プラグインにコマンドを渡すには、"exec_cmd
" 関数を使用します。どのようなコマンドが使用できるかは、マニュアルに記載されていますので、それを参照して下さい。実行するコマンドを設定したら、最後に go
コマンドを渡します。
int exec_cmd( char* uline );
uline | GWB アプリケーションに渡したいコマンドを含む文字列。 |
---|
myPlugin.exec_cmd("3 mmol H+"); myPlugin.exec_cmd("2 mmol Ca++"); myPlugin.exec_cmd("5 mmolar Cl-"); myPlugin.exec_cmd("go");
GWB プラグインで実行した計算結果は、"results
" 関数で得ることができます。キーワードや単位、戻り値のタイプは、マニュアルの Report Command に書かれているのと同じです。"results
" 関数では、レポートコマンドやキーワード、単位、ノードの位置 (X1t、X2t プログラムのみ) といっしょにデータブロックのアドレスを指定します。
int results( void* data, const char* value, const char* units = NULL, int ix = 0, int jy = 0 );
data [オプション] | 計算結果を埋めるデータブロックのアドレス。NULL にすることも可能。 |
---|---|
value | レポートコマンドのキーワードと引数を含む文字列。 |
units [オプション] | 返される結果の単位を指定する文字列。デフォルトの単位を使用する場合は NULL 又は空白文字列にすることも可能。 |
ix [オプション] | X ノード位置 |
jy [オプション] | Y ノード位置 |
// get aqueous species names int ndata = myPlugin.results(NULL,"species"); char** Species = new char*[ndata]; myPlugin.results(Species,"species"); // get aqueous species concentrations in mg/kg double* Conc = new double[ndata]; myPlugin.results(Conc,"concentration aqueous","mg/kg"); // get pH at node 3,5 double pH = ANULL; myPlugin.results(&pH,"pH",NULL,3,5);
GWB plug-in で現在動作確認されているのは、Micorosoft、Intel および GCC コンパイラです。
GWBplugin クラスが使用する GWB の DLL の場所を指定するためには、GWB インストールディレクトリを PATH 環境変数に追加する必要があります。
GWBplugin の export library (GWBplugin.lib) と ヘッダファイル (GWBplugin.h) は、GWB ディレクトリの "src" フォルダにインストールされます。
32-bit コンパイラを使って 64-bit ライブラリにリンクしたり、または、64-bit コンパイラで 32-bit ライブラリにリンクを指定するような場合にこうした問題が発生します。ご使用のコンパイラのバージョンが、インストールしている GWB のバージョンと一致しているかご確認ください。