Ошибка при вызове isc_attach_database (Firebird 1.5)
Добавлено: 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);
При вызове функции 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);