I have PostgreSQL 8.4 installed on Windows XP, and am using Visual Studio 2005 to write a C-Language function. I have the most basic hello-world type example (just the 'add_one' function from http://www.postgresql.org/docs/8.4/interactive/xfunc-c.html) in a DLL, set to compile to C code rather than C++, and I can do CREATE FUNCTION on it then use it successfully. However, I had to do some questionable hacks to get it to build, so I'm guessing I've done something the wrong way. I've not found anything categorical in the archives here, so would very much appreciate anyone who can tell me if there's a key step I'm missing that would make the hacks unnecessary. (For instance, I've come across a requirement in previous versions to replace pg_config.h with pg_config.h.win32, but that doesn't seem to apply to current versions - maybe something else does.) I'm concerned the hacks might turn round and bite me otherwise once I'm implementing something non-trivial.
Having added C:\Program Files\PostgreSQL\8.4\include\server to the include directories to pick up postgres.h and fmgr.h, the compiler complained about various missing include files, starting with 'libintl.h'. Having read the post at http://archives.postgresql.org/pgsql-general/2009-03/msg00332.php I created an empty libint.h in an include dir, along with a bunch of other empty dummy files that were expected: netdb.h, pwd.h, netinet/in.h and arpa/inet.h. The code then compiles ok, but gives 'inconsistent dll linkage' on the line with PG_FUNCTION_INFO_V1 and the one with PG_MODULE_MAGIC. So I'd like to ask: * Is there some symbol I should be defining, or something, to avoid all those dummy header files and make the corresponding Visual Studio headers get picked up? * Is there something I should be doing to avoid the 'inconsistent dll linkage' warnings? (The C-Language functions are going to end up using some in-proc Windows-only components, so I'm hoping that building them using Visual Studio will be the least painful way to get at those.) Thanks in advance for any help Kevin.