Программа C/C++, подключающаяся к 32-битной и 64-битной DB2 одновременно

StackOverflow https://stackoverflow.com/questions/540715

  •  22-08-2019
  •  | 
  •  

Вопрос

Возможно ли успешно написать программу на C/C++ в операционных системах *IX, которая одновременно работает как с 32-битной, так и с 64-битной реализациями DB2?

Точное требование — чтение из 32-битной базы данных DB2 и запись в 64-битную базу данных DB2.

Это было полезно?

Решение

Поскольку общий клиент C использует сетевое соединение, нет очевидной причины, по которой 32-битный клиент не должен подключаться ни к 32-битному, ни к 64-битному серверу (или к обоим по разным соединениям).Тот же комментарий относится и к 64-битным клиентам.Протокол DRDA, используемый для связи между клиентом и сервером, должен быть в порядке.

Я могу ответить однозначно за Informix (о котором вы не спрашивали): я использую 32-битный или 64-битный ESQL/C для без проблем подключения к 32-битным или 64-битным серверам IDS.Единственное ограничение касается подключения к общей памяти;тогда клиент и сервер должны иметь одинаковую «разрядность».Но сетевые соединения и локальные (потоковые, сокетные) соединения нейтральны.

Другие советы

Я думаю, ваша проблема в том, что вам приходится загружать обе библиотеки одновременно.Вы не можете просто связать оба в исполняемом файле, используя два параметра -l, потому что имена символов конфликтуют.Если проблема в этом, dlopen, если ваш друг.

#include <dlfcn.h>

void * handle=dlopen(filename,RTLD_NOW|RTLD_GLOBAL);

bool (*some_function)(char * name);
some_function=(bool (*)(char *))dlsym(handle,"name_of_some_function");
if (some_function("test")) {
    ....
} else {
    ....
}

Поскольку я не знаю DB2, я больше не могу вам помочь, но если проблема заключалась в этом, то теперь у вас должно быть все для ее решения.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top