Ассоциация ЭБНИТ    ИРБИС-корпорация    Вики-Ирбис    Online/CHM справка Ирбис   
Опыт и разработки пользователей ИРБИС :  ИРБИС Irbis
 
Ошибка при подключении через irbis64_client.dll
Пользователь: Shredder10 (IP-адрес скрыт)
Дата: 22, November, 2022 11:55

Добрый день. Недавно была поставлена задача автоматизировать экспорт данных по всем книгам на руках у студентов в местную базу университета, чтобы там в личном кабинете выводить информацию. Раньше экспорт производился вручную: в АРМ "Книговыдача" в меню Сервис -> Список должников/задолженной литературы -> Печать/Рассылка запись RDRW_HTML_DOLG в файл html с его последующей отправкой на сервер университета. Поскольку задача довольно простая, было решено использовать irbis64_client.dll, чтобы не устанавливать большие проекты вроде ManagedClient (по факту нужно подключиться, сформировать подобный файл и отключиться). В описании указаны функции пакетной обработки, с них планировалось получить нужные данные. Однако проблемы возникли при подключении к серверу. После подключения dll (через LoadLibrary) и нахождения функций выполняется запрос на авторизацию, однако в момент вызова функции происходит ошибка примерно такого содержания:

Unhandled exception at 0x008E8474 (irbis64_client.dll) in IRBISExport.exe: 0xC0000005: Access violation writing location 0x002C08E9.

Интересно, что коды, которые подчёркнуты, постоянно меняются, что, как я понимаю, вызвано динамичностью подключения библиотеки, однако они не являются ни кодом какой-либо переменной в моём коде, ни адресами самих вызываемых функций. Программа запускается из-под пользователя-администратора устройства, сервер развёрнут на том же компьютере (то есть подключение по ip 127.0.0.1). С чем может быть связана такая проблема и, возможно, есть какое-то более простое решение по вызову одной такой функции? По плану начальства, она должна выполняться автоматически раз в сутки.

Re: Ошибка при подключении через irbis64_client.dll
Пользователь: Gena (IP-адрес скрыт)
Дата: 23, November, 2022 12:07

Можете привести пример вашего кода?

Re: Ошибка при подключении через irbis64_client.dll
Пользователь: Shredder10 (IP-адрес скрыт)
Дата: 23, November, 2022 12:16

Опуская include и проверочные coutы, код выглядит вот так:

typedef int (*MYPROC)(LPTSTR);
typedef UINT(CALLBACK* LPFNDLLFUNC1)(PCHAR, PCHAR, char, PCHAR, PCHAR);
typedef UINT(CALLBACK* LPFNDLLFUNC2)();
typedef UINT(CALLBACK* LPFNDLLFUNC3)(PCHAR);


int main()
{
HINSTANCE hinstLib; // LibraryAdress
LPFNDLLFUNC1 lpfnDllFunc1;
LPFNDLLFUNC2 lpfnDllFunc2;
LPFNDLLFUNC3 lpfnDllFunc3;
BOOL fFreeResult, fRunTimeLinkSuccess = FALSE;
UINT uReturnVal;

hinstLib = LoadLibrary(TEXT("D:\\IRBISExport\\IRBISExport\\irbis64_client.dll"));

if (hinstLib != NULL)
{
lpfnDllFunc1 = (LPFNDLLFUNC1)GetProcAddress(hinstLib, "IC_reg");
lpfnDllFunc2 = (LPFNDLLFUNC2)GetProcAddress(hinstLib, "IC_print");
lpfnDllFunc3 = (LPFNDLLFUNC3)GetProcAddress(hinstLib, "IC_unreg");

if (NULL != lpfnDllFunc1 && NULL != lpfnDllFunc2 && NULL != lpfnDllFunc3)
{
fRunTimeLinkSuccess = TRUE;
PCHAR aserver_host = PCHAR("127.0.0.1");
PCHAR aserver_port = PCHAR("6666");
char arm = 'B';
PCHAR user_name = PCHAR("MASTER");
PCHAR password = PCHAR("MASTERKEY");

uReturnVal = lpfnDllFunc1(aserver_host, aserver_port, arm, user_name, password); //Здесь происходит ошибка
cout << "First function result: " << uReturnVal << endl;


uReturnVal = lpfnDllFunc3(user_name);
cout << "Logout function result: " << uReturnVal << endl;

}
fFreeResult = FreeLibrary(hinstLib);

}
if (!fRunTimeLinkSuccess) {
cout << "LoadLibrary error!" << endl;
}
return 0;
}



Редактировано 1 раз. Последний раз 23.11.2022 12:18 пользователем Shredder10.



Извините, только зарегистрированные пользователи могут писать в этом форуме.
This forum powered by Phorum.