mirror of
https://github.com/postgres/postgres.git
synced 2025-05-05 09:19:17 +03:00
Add documentation section "Using C++ for Extensibility".
Craig Ringer
This commit is contained in:
parent
309193bbd3
commit
b67fbb6c57
@ -1,4 +1,4 @@
|
||||
<!-- $PostgreSQL: pgsql/doc/src/sgml/extend.sgml,v 1.38 2010/04/03 07:22:53 petere Exp $ -->
|
||||
<!-- $PostgreSQL: pgsql/doc/src/sgml/extend.sgml,v 1.39 2010/06/01 02:31:36 momjian Exp $ -->
|
||||
|
||||
<chapter id="extend">
|
||||
<title>Extending <acronym>SQL</acronym></title>
|
||||
@ -273,4 +273,50 @@
|
||||
&xoper;
|
||||
&xindex;
|
||||
|
||||
<sect1 id="extend-how">
|
||||
<title>Using C++ for Extensibility</title>
|
||||
|
||||
<indexterm zone="extend-Cpp">
|
||||
<primary>C++</primary>
|
||||
</indexterm>
|
||||
|
||||
<para>
|
||||
It is possible to use a compiler in C++ mode to build
|
||||
<productname>PostgreSQL</productname> extensions; you must simply
|
||||
follow the standard methods for dynamically linking to C executables:
|
||||
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para>
|
||||
Use <literal>extern C</> linkage for all functions that must
|
||||
be accessible by <function>dlopen()</>. This is also necessary
|
||||
for any functions that might be passed as pointers between
|
||||
the backend and C++ code.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
Use <function>malloc()</> to allocate any memory that might be
|
||||
freed by the backend C code (don't pass <function>new()</>-allocated
|
||||
memory).
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
Use <function>free()</> to free memory allocated by the backend
|
||||
C code (do not use <function>delete()</> for such cases).
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
Prevent exceptions from propagating into the C code (use a
|
||||
catch-all block at the top level of all <literal>extern C</>
|
||||
functions).
|
||||
</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
</para>
|
||||
|
||||
</sect1>
|
||||
|
||||
</chapter>
|
||||
|
Loading…
x
Reference in New Issue
Block a user