Неявное подключение Dll

Тема в разделе "MS Visual C++", создана пользователем Ninetta, 30 мар 2010.

  1. Ninetta

    Ninetta Гость

    У меня есть только файлы dll и lib, и то lib сгенерирован из dll с помощью программы Dll2Lib, h-файла нету. Хочу подключить библиотеку неявно, скажите, такое подключение может работать?
    #pragma comment(lib, "NeuroNet.lib")

    У меня почему-то не работает, походу не видит библиотеку, не отображает её в ClassView. А может просто функции не так вызываю...

    Пробовала подключить через Project -> Linker -> Input -> Additional Dependencies, всё равно библиотеку не видит.
    Может дело в том, что нету h-файла? Тогда вопрос - как его получить??

    Или я просто что-то не правильно делаю?
    Заранее спасибо!
     
  2. zeus

    zeus Гость

    h-файл и lib иметь не обязательно, если Вы знаете какие функции содержаться в DLL, то вы можете воспользоваться функциями:
    Код (C++):
    HMODULE WINAPI LoadLibrary(LPCTSTR lpFileName);
    HMODULE WINAPI LoadLibraryEx(LPCTSTR lpFileName, HANDLE hFile, DWORD dwFlags);

    HMODULE WINAPI GetModuleHandle(LPCTSTR lpModuleName);

    FARPROC WINAPI GetProcAddress(HMODULE hModule, LPCSTR lpProcName);

    BOOL WINAPI FreeLibrary(HMODULE hModule);
    <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Например так:</div></div><div class="sp-body"><div class="sp-content">
    Код (C++):
    typedef void (WINAPI *PGNSI)(LPSYSTEM_INFO);

    // вызываем GetNativeSystemInfo если она есть в DLL иначе - GetSystemInfo.

    PGNSI pGNSI;
    SYSTEM_INFO si;

    ZeroMemory(&si, sizeof(SYSTEM_INFO));

    pGNSI = (PGNSI) GetProcAddress(
    GetModuleHandle(TEXT("kernel32.dll")),
    "GetNativeSystemInfo");

    if(NULL != pGNSI) pGNSI(&si);
    else GetSystemInfo(&si);
    Подробное описание выше перечисленных функций Вы сможете найти в MSDN...
     
  3. Odin_KG

    Odin_KG Гость

    Эта строка должна сработать, потому что тут h-файл не нужен, но толку без h-файла не будет. Неявное подключение требует h-файл.

    Функции из h-файла должны браться, а раз его нет, то и ничего нет.

    zeus правильно предлагает делать явное подключение.
     
  4. AtHeaven

    AtHeaven Гость

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

    Библиотека не находится видимо из-за путей.
    Стоит проверить, включена ли содержащая библиотеку директория в список путей к доп. библиотекам, напр. Linker->General->Additional Library Directories.
    Хотя опять же, без прототипов импортируемых ф-ий смысла нет.
     
  5. Mungust

    Mungust Гость

    Хммм, можно поробовать другую штуку. открыть dll редактором ресурсов типа PEditor или CFF Explorer(в принципе и F3 в тотале сгодится) и, просмотрев раздел импорта, написать собственный заголовочный файл. Только с типами данных проблемы могут быть. Не уверен что заработает, но попроботать стоит=)
     
  6. AtHeaven

    AtHeaven Гость

    Точнее, экспорта :ya_lamo: И к сожалению, вытянуть можно только названия ф-ий. Кол-во и типы параметров + тип возвращаемого значения - этого нет.
    Манглинг имен, если он включен, вроде содержит частично эту информацию.
     
Загрузка...

Поделиться этой страницей