Форум программистов, компьютерный форум CyberForum.ru

LoadLibrary - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 42, средняя оценка - 4.93
noob c++
 Аватар для noob c++
3 / 3 / 0
Регистрация: 11.07.2011
Сообщений: 49
20.07.2011, 09:36     LoadLibrary #1
Здравствуйте
Нужно подгрузить мою .dll в память.

C++
1
2
3
#include <windows.h>
 
HMODULE myDLL = LoadLibraryA("my.dll");
не компилится (error LNK1120: 1 неразрешенных внешних элементов)
подскажите как исправить. новичек
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.07.2011, 09:36     LoadLibrary
Посмотрите здесь:

LoadLibrary() не возвращает хэндл Visual C++
LoadLibrary() C++
Delphi [Dll] Выполнение кода при LoadLibrary
LoadLibrary, error 997(Overlapped I/O operation is in progress)
[Решено] LoadLibrary C++ Qt
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Melzas
 Аватар для Melzas
38 / 38 / 4
Регистрация: 20.07.2011
Сообщений: 88
20.07.2011, 16:46     LoadLibrary #41
Ничего особенного, стандартные аргументы WinMain, которые вам не пригодятся для теста. Я это предложил просто чтобы проверить не создали ли вы все-таки неконсольный проект Win32. Если этот код скомпилируется - значит так и есть. Если нет, то лучше поступить как написано в посте soft.creator.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
noob c++
 Аватар для noob c++
3 / 3 / 0
Регистрация: 11.07.2011
Сообщений: 49
20.07.2011, 17:35  [ТС]     LoadLibrary #42
Цитата Сообщение от Melzas Посмотреть сообщение
Ничего особенного, стандартные аргументы WinMain, которые вам не пригодятся для теста. Я это предложил просто чтобы проверить не создали ли вы все-таки неконсольный проект Win32. Если этот код скомпилируется - значит так и есть. Если нет, то лучше поступить как написано в посте soft.creator.
Все дело в том что в VS 2010 только Консольное приложение Win32 и Консольное приложение CLR. Выбрать между консольным и Win32 нельзя
Melzas
 Аватар для Melzas
38 / 38 / 4
Регистрация: 20.07.2011
Сообщений: 88
20.07.2011, 18:03     LoadLibrary #43
А вы вообще давно VS пользуетесь? Как вы добавляете файл с кодом в проект?
noob c++
 Аватар для noob c++
3 / 3 / 0
Регистрация: 11.07.2011
Сообщений: 49
20.07.2011, 18:13  [ТС]     LoadLibrary #44
Цитата Сообщение от Melzas Посмотреть сообщение
А вы вообще давно VS пользуетесь? Как вы добавляете файл с кодом в проект?
После того как создал Консольный Win32 проект в дополнительно я ставлю галочку рядом с пустой. Дальше открывается проект и я добавляю файл: файл/создать/.cpp.
Открывается окно куда я и пишу код.
VS я пользуюсь недавно, т.к. только начал изучать С++. До этого с програмированием не сталкивался вообще
Melzas
 Аватар для Melzas
38 / 38 / 4
Регистрация: 20.07.2011
Сообщений: 88
20.07.2011, 19:03     LoadLibrary #45
Кажется, я знаю в чем ваша проблема. Вы просто не добавляете ваш файл с кодом в проект. Создавайте файл с помощью Solution explorer (Обозреватель решений, если у вас русская версия). Он по умолчанию находится в левой части экрана. Если нет - откройте его из меню View (Вид). Там увидите папки проекта. Ваш файл необходимо добавить (или создать новый) в папку Source files (Файлы исходного кода). Дальше, думаю, разберетесь.
soft.creator
 Аватар для soft.creator
103 / 103 / 4
Регистрация: 17.10.2010
Сообщений: 283
20.07.2011, 21:42     LoadLibrary #46
Цитата Сообщение от Melzas Посмотреть сообщение
Кажется, я знаю в чем ваша проблема. Вы просто не добавляете ваш файл с кодом в проект. Создавайте файл с помощью Solution explorer (Обозреватель решений, если у вас русская версия). Он по умолчанию находится в левой части экрана. Если нет - откройте его из меню View (Вид). Там увидите папки проекта. Ваш файл необходимо добавить (или создать новый) в папку Source files (Файлы исходного кода). Дальше, думаю, разберетесь.
Похоже, Вы правы
noob c++
 Аватар для noob c++
3 / 3 / 0
Регистрация: 11.07.2011
Сообщений: 49
21.07.2011, 08:44  [ТС]     LoadLibrary #47
Melzas спасибо. Проект не компилился из-за неправильного добавления файла в проект.
Сейчас все нормально.
Как сейчас можно проверить загрузку dll ? Увидеть что мой загрузчик подгружает именно ту библиотеку которая лежит с ним в папке.
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
21.07.2011, 08:53     LoadLibrary #48
The first directory searched is the directory containing the image file used to create the calling process
Т.е. в первую очередь он будет искать в папке с exe-шником.
Если ты не ошибся в указании имени библиотеки, то будь уверен в том что он загрузит именно ту которая находится в папке.
An1ka
65 / 70 / 2
Регистрация: 30.06.2011
Сообщений: 176
21.07.2011, 08:55     LoadLibrary #49
Цитата Сообщение от noob c++ Посмотреть сообщение
Как сейчас можно проверить загрузку dll ? Увидеть что мой загрузчик подгружает именно ту библиотеку которая лежит с ним в папке.
Во время отладки:
ctrl+alt+U - в этом окне загруженные модули показываются.
noob c++
 Аватар для noob c++
3 / 3 / 0
Регистрация: 11.07.2011
Сообщений: 49
21.07.2011, 08:59  [ТС]     LoadLibrary #50
Цитата Сообщение от lazybiz Посмотреть сообщение
Т.е. в первую очередь он будет искать в папке с exe-шником.
Если ты не ошибся в указании имени библиотеки, то будь уверен в том что он загрузит именно ту которая находится в папке.
в папке с .ехе лежит my.dll, но при запуске просит msvcr100d.dll
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
21.07.2011, 09:03     LoadLibrary #51
Это Runtime библиотека. Тебе необходимо установить что-то типа vc_redist. Хотя на сомом деле в винде она должна быть. Если тебе не нужна информация об отладке, то попробуй откомпилировать как Release а не Debug.
noob c++
 Аватар для noob c++
3 / 3 / 0
Регистрация: 11.07.2011
Сообщений: 49
21.07.2011, 09:11  [ТС]     LoadLibrary #52
Цитата Сообщение от lazybiz Посмотреть сообщение
Если тебе не нужна информация об отладке, то попробуй откомпилировать как Release а не Debug.
То есть вверху в окошке где Debug исправить на Release и F7 ?
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
21.07.2011, 09:14     LoadLibrary #53
Цитата Сообщение от noob c++ Посмотреть сообщение
То есть вверху в окошке где Debug исправить на Release и F7 ?
Именно!
noob c++
 Аватар для noob c++
3 / 3 / 0
Регистрация: 11.07.2011
Сообщений: 49
21.07.2011, 09:41  [ТС]     LoadLibrary #54
Цитата Сообщение от lazybiz Посмотреть сообщение
Если тебе не нужна информация об отладке, то попробуй откомпилировать как Release а не Debug.
отлично. спасибо. размер в 5 раз меньше ))
а .dll просит все равно. может можно ее как-то в проект встроить ?
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
21.07.2011, 10:27     LoadLibrary #55
Тебе в проекте нужно выставить опцию Multithreaded, static link, вот только где она я не помню. Должна быть где-то в опциях линковки. Попробую поискать....
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
21.07.2011, 10:30     LoadLibrary #56
Ищи примерно там где показано на рисунке.
Миниатюры
LoadLibrary  
An1ka
65 / 70 / 2
Регистрация: 30.06.2011
Сообщений: 176
21.07.2011, 10:30     LoadLibrary #57
Цитата Сообщение от noob c++ Посмотреть сообщение
отлично. спасибо. размер в 5 раз меньше ))
а .dll просит все равно. может можно ее как-то в проект встроить ?
Чтобы при запуске программа не просила динамические библиотеки специфичные для MSVC ?
ALT+F7 -> "Свойства конфигурации" -> C/C++ -> "Библиотека времени выполнения" -> Там выбрать можно /MT или /MTd ( кроме DLL)
Они будут статически линковаться в exe файл и размер его соответственно увеличится.
noob c++
 Аватар для noob c++
3 / 3 / 0
Регистрация: 11.07.2011
Сообщений: 49
21.07.2011, 11:25  [ТС]     LoadLibrary #58
Заработало без левых dll. Вес увеличился сильно.
Какая разница между /MT и /MTd ?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.07.2011, 11:32     LoadLibrary
Еще ссылки по теме:

Matlab Простейший DLL на С и его loadlibrary in matlab
Assembler Invoke + GetProcAddress & LoadLibrary

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
An1ka
65 / 70 / 2
Регистрация: 30.06.2011
Сообщений: 176
21.07.2011, 11:32     LoadLibrary #59
Цитата Сообщение от noob c++ Посмотреть сообщение
Заработало без левых dll. Вес увеличился сильно.
Какая разница между /MT и /MTd ?
/MT для релизной версии, а /MTd для отладки. d - значит debug
Как правило первые более быстрые и оптимизированные. А вторые более медленные с большим количеством проверок и предоставляют больше возможностей при отладке.
Yandex
Объявления
21.07.2011, 11:32     LoadLibrary
Ответ Создать тему
Опции темы

Текущее время: 11:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru