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

  • Автор темы Ninetta
  • Дата начала
N

Ninetta

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

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

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

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

zeus

#2
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...
 
O

Odin_KG

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

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

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

AtHeaven

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


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

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

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

Mungust

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

AtHeaven

#6
Хммм, можно поробовать другую штуку. открыть dll редактором ресурсов типа PEditor или CFF Explorer(в принципе и F3 в тотале сгодится) и, просмотрев раздел импорта, написать собственный заголовочный файл. Только с типами данных проблемы могут быть. Не уверен что заработает, но попроботать стоит=)
Точнее, экспорта :ya_lamo: И к сожалению, вытянуть можно только названия ф-ий. Кол-во и типы параметров + тип возвращаемого значения - этого нет.
Манглинг имен, если он включен, вроде содержит частично эту информацию.