Thread: libpq static link library dowsn't work (M$ VS6)

libpq static link library dowsn't work (M$ VS6)

From
"Finn Kettner"
Date:
Hello again.

I'm in the process of making a COM wrapper (enabling VB to connect to
PostGres) for the libpq library using Visual Studio 6.0 Pro, but have
a few problems. I can make use of the libpq.dll library from the COM
wrapper, but I thought that it might be a bit better if the actual
library routines was included in the COM wrapper, and thus making the
libpq.dll unnedded.

But if I include all the files that make up the library, then I can't
get a connection. I even tried to make a small test file which works
ok when using the dll, but doesn't when I include the actual .c files
which make up the dll and static link library (.lib). Linking with the
static link library that comes with the dll file doesn't work either.
This little program is what I've used. Has anybody succedded in lnking
an application with the static link library (libpq.lib) and actually
getting a working application??? If so then I'm very interested in
getting any help.

-------- test file ---------- test file -----------

#include <iostream.h>
#include "libpq-fe.h"

int main (int argc, char* argv[])
{  PGconn *conn;
  cout << "Hello pgsql world!!!" << endl;  cout << "Connecting to the database." << endl;  conn =
PQconnectdb("host=host.nameuser=root");  if (PQstatus(conn) == CONNECTION_BAD) {     cout << "Boohoo, the connection
failed!!!"<< endl;     cout << "Value is " << (long) conn << endl;  } else {     cout << "Hurray, we got connected." <<
endl;    PQfinish(conn);  }  return 0;
 
}

-------- test file ---------- test file -----------

Yours faithfully.
Finn Kettner.
PS. I have also created a project file for the psql application, if
this has any interest it might as well be included in the furture
distributions of postgresql. The dll and static link library is also
more or less finished, but as I can't link with the static link
library I don't think that it has much interest untill the problem is
solved.


Re: libpq static link library dowsn't work (M$ VS6)

From
Hiroshi Inoue
Date:

Finn Kettner wrote:

> Hello again.
>
> I'm in the process of making a COM wrapper (enabling VB to connect to
> PostGres) for the libpq library using Visual Studio 6.0 Pro, but have
> a few problems. I can make use of the libpq.dll library from the COM
> wrapper, but I thought that it might be a bit better if the actual
> library routines was included in the COM wrapper, and thus making the
> libpq.dll unnedded.
>
> But if I include all the files that make up the library, then I can't
> get a connection. I even tried to make a small test file which works
> ok when using the dll, but doesn't when I include the actual .c files
> which make up the dll and static link library (.lib). Linking with the
> static link library that comes with the dll file doesn't work either.
> This little program is what I've used. Has anybody succedded in lnking
> an application with the static link library (libpq.lib) and actually
> getting a working application??? If so then I'm very interested in
> getting any help.
>

libpq.dll calls WSAStartup() in dllmain() which is never
called from static library. Probably you had better
call WSAStartup() from upper level application.

Regards.

Hiroshi Inoue



RE: libpq static link library dowsn't work (M$ VS6)

From
Magnus Hagander
Date:
> Hello again.
> 
> I'm in the process of making a COM wrapper (enabling VB to connect to
> PostGres) for the libpq library using Visual Studio 6.0 Pro, but have
> a few problems. I can make use of the libpq.dll library from the COM
> wrapper, but I thought that it might be a bit better if the actual
> library routines was included in the COM wrapper, and thus making the
> libpq.dll unnedded.
Sounds great. I've been thinking about doing this myself, but never got
around to it... Linking with the static library is definitly a good idea -
it makes it possible to deploy libpq functionality using ActiveX over a
normal webpage, withuot requiring libpq.dll to be installed on every
machine.


> But if I include all the files that make up the library, then I can't
> get a connection. I even tried to make a small test file which works
> ok when using the dll, but doesn't when I include the actual .c files
> which make up the dll and static link library (.lib). Linking with the
> static link library that comes with the dll file doesn't work either.
WHen you use the static library, you need to initialize the Winsock library
yourself. You need code like:
WSADATA wsaData;
if (WSAStartup(MAKEWORD(1, 1), &wsaData)) {  cout << "Failed to initialize winsock: " << GetLastError() << endl;
exit(1);
}

The code that handles this in the DLL is located in
src/interfaces/libpq/libpqdll.c - for reference.


> PS. I have also created a project file for the psql application, if
> this has any interest it might as well be included in the furture
> distributions of postgresql. The dll and static link library is also
> more or less finished, but as I can't link with the static link
> library I don't think that it has much interest untill the problem is
> solved.
I originally chose not to include the project file as it can change format
between version os Visual Studio. If you create it in VS6, it cannot be used
in VS5 IIRC. The Makefile format works in both.
You can create a project file while you work and then export that to a
Makefile once things compile (Project -> Export Makefile).


//Magnus