Further questions on interfacing to Postgres libpq
rikki cattermole
rikki at cattermole.co.nz
Sat Jan 27 05:19:13 UTC 2018
On 27/01/2018 5:11 AM, Joe wrote:
> An example test program that I'm using to learn D to C interfacing
> (specifically calling the libpq library) has a call to a C function
> declared as follows:
>
> void PQprint(FILE *fout, /* output stream */
> const PGresult *res,
> const PQprintOpt *po);
>
> PQprintOpt is a struct whose first six members are declared as 'pqbool'
> which is in turn declared as "typedef char pqbool;" in the distributed
> Postgres header file. I've defined an "alias pqbool = char;" in the D
> file, which is pretty straightforward.
Use ubyte, not char.
char has a bunch of logic related to Unicode surrounding it which is
clearly not the intent.
> The second of the six members has the name "align", which is a D
> keyword. So I renamed it "align_" and I presume that won't cause any
> problems.
You're good, layout+size just has to match not names of fields.
> To deal with the first argument to PQprint, I added "import
> core.stdc.stdio : FILE;". The question is how to pass the D "stdout" as
> that argument. The D compiler tells me I can't pass it as is (as was
> done in C), because in D it's of type "File".
https://dlang.org/phobos/std_stdio.html#.File.getFP
More information about the Digitalmars-d-learn
mailing list