我在编写 C ++ 代码时与#include <seal/seal.h>
一起使用的 PostgreSQL 在同一台PC上有一个已编译的库。我必须使用该库来处理PostgresSQL数据库中的某些表值。遗憾的是,不能选择使用 Postgres 在同一台PC上运行单独的客户端来与数据库进行通信。
是否可以在 PostgreSQL 函数或过程中包含和使用#include <seal/seal.h>
随附的函数?
我读到一些有关使用的信息:
external "C" {
#include <seal/seal.h>
// do something with the seal functions here
}
但是这里没有太多的例子,我也不理解。 PostgreSQL 文档中有关 C ++ 的部分也没有使其更清晰。
答案 0 :(得分:0)
如文档所建议,从PostgreSQL调用的函数必须声明为extern C
,以便C代码可以与其链接。
在必须从C ++库调用函数的地方,您可以使用异常处理程序,该处理程序使用catch (...)
捕获所有可能的异常并将其转换为PostgreSQL错误消息通过调用ereport()
(在catch
子句之外,因此您的调用堆栈中没有C ++)。
如果必须调用PostgreSQL C函数,请确保调用堆栈不包含任何非Result
的值:
C ++中的PDS类型或Plain Old C ++ Object被定义为标量类型或PDS类。 PDS类没有用户定义的副本分配运算符,没有用户定义的析构函数,也没有本身不是PDS的非静态数据成员。而且,PDS类必须是一个聚合,这意味着它没有用户声明的构造函数,没有私有或受保护的非静态数据,没有虚拟基类,也没有虚拟函数。
简而言之,除非调用库函数,否则应尽可能使用C编写代码。