January 27, 2018 Further questions on interfacing to Postgres libpq | ||||
---|---|---|---|---|
| ||||
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. 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. 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". |
January 27, 2018 Re: Further questions on interfacing to Postgres libpq | ||||
---|---|---|---|---|
| ||||
Posted in reply to Joe | 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 |
Copyright © 1999-2021 by the D Language Foundation