Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Как подключить готовую dll к проекту?  (Прочитано 14391 раз)
0 Пользователей и 1 Гость смотрят эту тему.
farewell
Интересующийся

ru
Offline Offline

« : 24-06-2010 07:27 » 

В общем, есть у меня обычный консольный проект, есть dll-ka, в которой описание всего одной функции. Как подгрузить эту штуку в проект?
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


WWW
« Ответ #1 : 24-06-2010 07:37 » 

для статики
Код:
#pragma comment(lib,"...")

для динамики
Код:
MODULE LoadLibrary(
  LPCTSTR lpFileName
);

+

FARPROC GetProcAddress(
  HMODULE hModule,
  LPCSTR lpProcName
);


Улыбаюсь
Записан

Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #2 : 24-06-2010 07:38 » 

Придётся загружать динамически. Статически подключить к проекту, если это имеется ввиду, можно при наличии заголовочного файла и .lib
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
farewell
Интересующийся

ru
Offline Offline

« Ответ #3 : 24-06-2010 07:46 » 

У меня есть файл .dll, файл .lib и даже файл .exp =)
В отдельной папке.
Нужно сначала добавить что-то из них в проект?
Блин, что-то нифига не соображаю - на экзамене сижу=)
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


WWW
« Ответ #4 : 24-06-2010 08:05 » 

а начале файла кода впиши #pragma comment(lib,"путь к lib")
А dll положи рядом с экзешником
Записан

farewell
Интересующийся

ru
Offline Offline

« Ответ #5 : 24-06-2010 08:06 » 

Полный путь к .lib? Ок. А можно его тоже рядом с екзешником положить?
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


WWW
« Ответ #6 : 24-06-2010 08:07 » 

lib нужен для линкера - в среде программирования надо путь к либе прописать. Или же в папку проекта закинуть, тогда можно только имя либы написать
Записан

farewell
Интересующийся

ru
Offline Offline

« Ответ #7 : 24-06-2010 08:12 » 

Хм.. Я еще до этого подключил либу к проекту, теперь просто написал
#pragma comment(lib,"Mydll.lib")
И ошибки никакой не вылезло=)

Но есть другая ошибка, поглобальнее. У меня в длл-ке описание процедуры под названием fen. Теперь эту процедуру можно юзать в проге, как будто она у нас прямо тут и объявлена? Просто мне надо получить её адрес, пишу что-то типа
printf(%p",fen);
а он говорит, что fen: undeclared identifier (
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #8 : 24-06-2010 08:33 » 

Тебе в проект надо добавить Mydll.h с декларацией ф-ции fen.

типа

void fen(void);

или какие она там у тебя параметры принимает и возвращает?
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #9 : 24-06-2010 08:34 » 

Слушай, а может тебе всё-таки надо её (dll) динамически подгружать?
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
farewell
Интересующийся

ru
Offline Offline

« Ответ #10 : 24-06-2010 08:37 » 

Все, заработала! Отличненько! Спасибо вам всем))
Последняя проблема: как преобразовать адрес полученной функции (вида 00411184) в вид команд типа \x48\x11\x12 ?
Может, знает кто-нибудь?=)
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


WWW
« Ответ #11 : 24-06-2010 09:48 » 

что такое "вид команд" ? )
Записан

ind
Интересующийся

ua
Offline Offline

« Ответ #12 : 20-10-2010 16:40 » 

А вот еще один вопросик в тему: как неявно подключить библиотеку к проекту MSVS, если есть только DLL и H файлы. Например, у Борланда есть утилитка implib, которая генерит LIB файл из DLL. Но насколько я понял, форматы LIB файлов разные у разных компиляторов? По крайней мере, подключить полученный LIB файл в проект студии у меня не получилось. По-идее должна быть аналогичная прога и от Майкрософта.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


WWW
« Ответ #13 : 20-10-2010 16:49 » 

дык,
LoadLibrary
+
GetProcAddress

а заголовочник - чтобы правильно тип функции задать.
Записан

darkelf
Молодой специалист

ua
Offline Offline

« Ответ #14 : 21-10-2010 05:13 » 

Если есть def-файл, к dll, то из него можно сделать lib:
Код:
lib /def:<deffilename>
В противном случае как и сказали - подгружать в ручную.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines