Ошибка при вызове isc_attach_database (Firebird 1.5)

IBX, FIBPlus, UIB, ADO, .Net и прочее-прочее-прочее, в общем все, что относится к созданию приложений, работающих с InterBase, Firebird и Yaffil - клиент-серверных, трехзвенных, консольных и т.п.

Модератор: kdv

Ответить
ForceMan
Сообщения: 1
Зарегистрирован: 15 май 2006, 11:57

Ошибка при вызове isc_attach_database (Firebird 1.5)

Сообщение ForceMan » 15 май 2006, 15:40

Пишу клиента для данной БД на С++, используя API данной БД.
При вызове функции isc_attach_database, вылазит ошибка Segmentation Fault. В проекте я подключаю библиотеку libfbclient.so, вызов функции isc_expand_dpb проходит безо всяких проблем. В чем может быть проблема?
Вот мой код:

#include <stdlib.h>
#include <dlfcn.h>
#include <string.h>
#include "/usr/local/include/ibase.h"

int main()
{
// DLL and import functions
void *dlhandler = dlopen("libfbclient.so", RTLD_GLOBAL);
if(!dlhandler){
exit(1);
}

char dpb_buffer[256], *dpb, *p;
char umame[256], upass[256];
short dpb_length;
dpb = dpb_buffer;
*dpb++ = isc_dpb_version1;
dpb_length = dpb - dpb_buffer;
dpb = dpb_buffer;
typedef void (*isc_expandType)(char * *, short *, ...);
isc_expandType isc_expand_dpb = (isc_expandType) dlsym(dlhandler, "isc_expand_dpb");
isc_expand_dpb(&dpb, &dpb_length, isc_dpb_user_name, "SYSDBA", isc_dpb_password, "masterkey", NULL);

typedef ISC_STATUS ISC_EXPORT (*isc_attachType)(ISC_STATUS *, short, char *, isc_db_handle *, short, char *);

isc_attachType isc_attach_database = (isc_attachType) dlsym(dlhandler, "isc_attach_database");

isc_db_handle db1=0L;
ISC_STATUS status_vector[20];
char *str = "/usr/home/igor/test.fdb";

//isc_attach_database(status_vector, strlen(str), str, &db1, 0, NULL);
isc_attach_database(status_vector, 23, "/usr/home/igor/test.fdb", &db1, 0, NULL);
/*
if(status_vector[0] == 1 && status_vector[1])

{
isc_print_status(status_vector);
}

if(db)
isc_detach_database(status_vector, &db);
*/
dlclose(dlhandler);

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Сообщение Dimitry Sibiryakov » 16 май 2006, 08:17

Во-первых, isc_expand_dpb жутко глючная и к использованию не рекомендуется.
Во-вторых проверь а нашелся ли символ "isc_attach_database".
В-третьих, dpb ты, конечно, сделал, а передать его isc_attach_database()?..

Ответить