Russian Qt Forum
Октябрь 01, 2024, 00:25 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Не находит символ библиотеки  (Прочитано 4532 раз)
Andrey_hello
Гость
« : Февраль 27, 2008, 21:42 »

Добрый вечер.
Проблема заключается в следующем.
Для скомпилированной библиотеки при попытке запустить её функцию (GetProcAddress) выдает ошибку 3 (ERROR_PATH_NOT_FOUND). Библиотека открывается (LoadLibrary).
Qt3.3.3, Microsoft VS 2003.

Вот код библиотеки:
Код:
//#ifdef __cplusplus 
extern "C" {
//#endif

#ifdef WIN32
  __declspec(dllexport)
#endif
int mail_for_docflow_new(char *FullHtmFileName, ADDRLIST *PreAddrList)
{
//int mail_so_new(char *FullHtmFileName, NULL, ADDRLIST *PreAddrList);
  #ifdef _test_pr
  cout << "mail_for_docflow_new()" << endl;
  #endif
  return 0;
}
//#ifdef __cplusplus
}
//#endif

Вот запускающий код:
Код:
#ifdef WIN32
    HINSTANCE dll = LoadLibrary(L"mail_forDocflow.dll");
  #else
    void *dll = dlopen("../lib/libmail_forDocflow.so", RTLD_LAZY);
  #endif

  int (*p)(char *FullHtmFileName, ADDRLIST *PreAddrList);

    if  (dll != NULL)
      {
      fprintf(stderr, "IDDB=%d\n", IDDB);

      #ifdef WIN32
        p = (int (*)(char *FullHtmFileName, ADDRLIST *PreAddrList))GetProcAddress(dll, "mail_for_docflow_new");
      #else
       p = (int (*)(char *FullHtmFileName, ADDRLIST *PreAddrList))dlsym(dll, "mail_for_docflow_new  ");
      #endif

    #ifdef WIN32
     fprintf(stderr,"GetLastError()= %d\n", GetLastError());
      #else
      fprintf(stderr,"dlerror()= %s\n", dlerror());
      #endif
     }
« Последнее редактирование: Февраль 28, 2008, 12:58 от pastor » Записан
Alex03
Гость
« Ответ #1 : Февраль 28, 2008, 08:01 »

Немного не в тему, но:
А чем вас QLibrary не устраивает?
Записан
Tonal
Гость
« Ответ #2 : Февраль 28, 2008, 08:25 »

Скорее всего, не угадал с именем. :-)
Если мне склероз не изменяет, то в имя экспорта будет добавлен подчерк: "_mail_for_docflow_new"
Посмотри каким-нибудь depend-ом как именно оно исказилось. :-)

P.S. Используй тег code для исходников - всем проще будет.
Записан
Andrey_hello
Гость
« Ответ #3 : Февраль 28, 2008, 21:45 »

Ошибка оказалась простой и смешной Смеющийся Смеющийся Смеющийся

Кроме получения адресов на библиотеку и функцию библиотеки надо адресом на функцию потом ещё и воспользоваться. Смеющийся

А getlasterror возвращает какую то не относящуюся к данной ситуации ошибку.

Вызываю p(параметры) - всё работает.
Записан
BRE
Гость
« Ответ #4 : Февраль 28, 2008, 21:53 »

Кроме получения адресов на библиотеку и функцию библиотеки надо адресом на функцию потом ещё и воспользоваться. Смеющийся
Предварительно проверив а не 0 ли это.  Подмигивающий
Записан
Andrey_hello
Гость
« Ответ #5 : Февраль 28, 2008, 23:01 »

Предварительно проверив а не 0 ли это.  Подмигивающий

В Microsoft это дело любят "...не найден...повторная установка поможет...". Злой
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.097 секунд. Запросов: 20.