Проблема с подключением к Postgres через libpq.dll

 
Собственно пытаюсь подключить библиотеку постгреса libpq.dll (файл лежит в Libraries):
#import "libpq.dll"
   int PQconnectdbParams(string keywords, string values, int expand_dbname);
   int PQconnectdb(string conninfo);
   int PQping(string conninfo);
#import

 и соединиться :

int OnInit()
  {
//--- 
   string connstr = UNICODE2ANSI("dbname=db user=postgres password=pass");
   int conn = PQconnectdb(connstr);  
   printf(DoubleToString(conn));
//---
   return(INIT_SUCCEEDED);
  }

во время выполнения  PQconnectdb()  падает с сообщением: initializing of pgTest (AUDCAD,H1) failed

Спецификация функции соединения из документации Postgres:

PQconnectdb
Makes a new connection to the database server.

PGconn *PQconnectdb(const char *conninfo);
This function opens a new database connection using the parameters taken from the string conninfo. 


Функция string UNICODE2ANSI(string s) нормально срабатывает в частности при соединении с MySQL.

Кто-нибудь знает что я делаю не так? :)


UPD: при указании хоста и порта в строке соединения результат аналогичный.

 

Попробуйте так:

int PQconnectdb(uchar &conninfo[]);
//--- строка подключения
string str_con="dbname=db user=postgres password=pass";

//--- конвертация в ansi строку
uchar ansi_con[];
StringToCharArray(str_con,ansi_con);

//--- соединение
int con = PQconnectdb(ansi_con);
 

Попробовал: выполняю вызов с преобразованием через StringToCharArray(), результат аналогичный.
При этом ни в лог терминала ни в лог сервера Postgres ничего не пишется. Например при попытке соединиться c сервером из Java-приложения с указанием только порта (он нестандартный - 5433) параметры хоста и базы подставляются по умолчанию и в лог сервера попадает запись о невозможности соединиться, т.к. не указан юзер.

 А если выполнять

#import "libpq.dll"
    int PQconnectdb(uchar &conninfo[]);
#import 
   string connStrUnicode = "port=5433";
   uchar connStrAnsi[];
   StringToCharArray(connStrUnicode,connStrAnsi);   
   int conn = PQconnectdb(connStrAnsi);

то ничего не логируется.

Может ли быть так, что библиотека не соответствует соглашению о вызове, поддерживаемому MQL5 ?

 
k47:

Может ли быть так, что библиотека не соответствует соглашению о вызове, поддерживаемому MQL5 ?

В таком случае будет ругаться уже терминал в логах.