Russian Qt Forum

Qt => Установка, сборка, отладка, тестирование => Тема начата: Andrey_hello от Февраль 27, 2008, 21:42



Название: Не находит символ библиотеки
Отправлено: 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
     }


Название: Re: Не находит символ библиотеки
Отправлено: Alex03 от Февраль 28, 2008, 08:01
Немного не в тему, но:
А чем вас QLibrary не устраивает?


Название: Re: Не находит символ библиотеки
Отправлено: Tonal от Февраль 28, 2008, 08:25
Скорее всего, не угадал с именем. :-)
Если мне склероз не изменяет, то в имя экспорта будет добавлен подчерк: "_mail_for_docflow_new"
Посмотри каким-нибудь depend-ом как именно оно исказилось. :-)

P.S. Используй тег code для исходников - всем проще будет.


Название: Re: Не находит символ библиотеки
Отправлено: Andrey_hello от Февраль 28, 2008, 21:45
Ошибка оказалась простой и смешной ;D ;D ;D

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

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

Вызываю p(параметры) - всё работает.


Название: Re: Не находит символ библиотеки
Отправлено: BRE от Февраль 28, 2008, 21:53
Кроме получения адресов на библиотеку и функцию библиотеки надо адресом на функцию потом ещё и воспользоваться. ;D
Предварительно проверив а не 0 ли это.  ;)


Название: Re: Не находит символ библиотеки
Отправлено: Andrey_hello от Февраль 28, 2008, 23:01
Предварительно проверив а не 0 ли это.  ;)

В Microsoft это дело любят "...не найден...повторная установка поможет...". >:(