Re: libpq on windows
От | jtv@xs4all.nl |
---|---|
Тема | Re: libpq on windows |
Дата | |
Msg-id | 20704.202.47.227.25.1116570741.squirrel@202.47.227.25 обсуждение исходный текст |
Ответ на | libpq on windows (Gustavo Lopes <contratempo@gmail.com>) |
Ответы |
Re: libpq on windows
|
Список | pgsql-interfaces |
Gustavo Lopes <contratempo@gmail.com> wrote: > The problem seems to occurr only when the server sends a hint or the > dll generates one. This can happen when the connection to the server > cannot be established because the server is not running, a nonexistant > postgres function exist is called, when one attempts to drop an index > upon which a constraint depends, etc. (the program doesn't go beyond > PQconnectdb, PQexec or PQexecparam). Since my debugging skills are > very poor I cannot give any accurate description on what is causing > the exception. > The problem can be very easily reproduced by creating a C program > which calls PQconnectdb with a host parameter that points to a machine > that is not running postgres. > Running the same program under linux (although I used older versions > of the interface and the server) does not cause any problems. It could be the notice processor that crashes. A "notice processor" is a callback that you can register with libpq that handles error messages. The default is to print them to the console, but I'm not sure you can always do that in a Windows program. Or since you're apparently using different compilers for libpq and the application, maybe the default notice processor gets linked to a different standard library than it expects and fails because of that. Notice processors are documented here: http://www.postgresql.org/docs/8.0/interactive/libpq-notice-processing.html To find out if this is what's wrong, try creating an empty function (with C-style calling convention, not a regular C++ function) and setting that as the notice processor: extern "C" { /* (this line only needed in C++) */ void emptynoticeprocessor(void *, const char *) { } } /* (this line onlyneeded in C++) */ Now in your code, just after you opened your connection (call it "c"): PQsetNoticeProcessor(c,emptynoticeprocessor,NULL); Of course that will mean that error messages are not displayed, so if this solves your crashing problem then your next step is to implement something here that displays the given message! Jeroen
В списке pgsql-interfaces по дате отправления: