libpq++ または SQLAPI++ を使用せずに C++ と Postgresql の間のインターフェイスを作成するにはどうすればよいですか。これら 2 つのライブラリをインストールしようとしましたが、できませんでした (Windows のチュートリアルはありません)。Postgis と Pgrouting が C++ を使用していることは知っています。おそらく、別のライブラリを使用して Postgresql とのインターフェースをとっています...
ありがとう:D
libpq++ または SQLAPI++ を使用せずに C++ と Postgresql の間のインターフェイスを作成するにはどうすればよいですか。これら 2 つのライブラリをインストールしようとしましたが、できませんでした (Windows のチュートリアルはありません)。Postgis と Pgrouting が C++ を使用していることは知っています。おそらく、別のライブラリを使用して Postgresql とのインターフェースをとっています...
ありがとう:D
役立つドキュメント:
C++ でコーディングされ、セットを返す関数 foo の場合、次のファイルがあります。
foo.c
「35.9.9. セットを返す (複合型を返す単純な SRF の完全な例)」に従いますが、実際の c++ を呼び出す前に、何らかの処理を行う (ほとんどの場合、より多くのデータを読み取る) 静的関数を呼び出す点が異なります。関数。
static process ( char* a, bool b, bool c, mystruct* result_tuples, int result_count) {
<maybe some checking or conversions here of a, b, & c>
call_cpp_function( a1, b1, c1, result_tuples, result_count )
}
PG_FUNCTION_INFO_V1(foo);
Datum
foo(PG_FUNCTION_ARGS) {
...
process(
pgr_text2char(PG_GETARG_TEXT_P(0)),
PG_GETARG_BOOL(1),
PG_GETARG_BOOL(2),
&result_tuples,
&result_count);
...
} // end of first call
...
if (call_cntr < max_calls) {
...
else {
free(result_tuples);
SRF_RETURN_DONE(funcctx);
}
};
foo_driver C コードと C++ コードで使用される C++ 関数の定義があります。
#ifdef __cplusplus
extern "C" {
#endif
void call_cpp_function( <parameters > );
#ifdef __cplusplus
}
#endif
foo_driver.cpp
postgres ファイル以外の関数「call_cpp_function」の実際の cpp コードがここに含まれます。もちろん、ここにさらに c++ ファイルを含めることもできます。特定のルール:
例えば
#include < vector >
#include < deque >
#include "myclass.h"
void call_cpp_function( <parameters > ) {
try {
<process>
// use malloc to prepare the C array
} catch( .. ) {
// do cleanup
}
}
注:この回答でカバーされていないこと:コンパイル、リンク、拡張機能としての追加。