Как я могу создать интерфейс между C ++ и Postgresql без использования libpq ++ или SQLAPI ++, потому что я пытался установить эти две библиотеки, но у меня не получилось (учебников для Windows нет). Я знаю, что Postgis и Pgrouting используют C ++. Возможно, они используют другую библиотеку для взаимодействия с Postgresql …
Спасибо: D
Полезная документация:
Для функции foo, которая должна быть написана на c ++ и которая будет возвращать наборы, у меня есть следующие файлы:
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
имеет фактический код cpp функции call_cpp_function, сюда не нужно включать файлы postgres, и, конечно, вы можете включить сюда больше файлов 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
}
}
Примечание: вещи, не затронутые в этом ответе: компиляция, компоновка, добавление как расширение.
Других решений пока нет …