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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 42, средняя оценка - 4.93
noob c++
3 / 3 / 0
Регистрация: 11.07.2011
Сообщений: 49
#1

LoadLibrary - C++

20.07.2011, 09:36. Просмотров 5364. Ответов 58
Метки нет (Все метки)

Здравствуйте
Нужно подгрузить мою .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() - C++
Вызываю LoadLibrary() (файл dll4.dll лежит в каталоге экзешника) HMODULE hdll1 = LoadLibraryA(&quot;dll4.dll&quot;); по getlasterror...

[Решено] LoadLibrary - C++ Qt
Здраствуйте. Сделал динамическую библиотеку в студии, загружал ее там же в консольное приложение с помощью LoadLibrary - все работает,...

LoadLibrary() не возвращает хэндл - Visual C++
Не могу понять, почему HINSTANCE myLib = LoadLibraryEx((LPCWSTR)&quot;myDll.dll&quot;, 0, DONT_RESOLVE_DLL_REFERENCES); Не возвращает хэндл. Файл...

Ошибка 126 в LoadLibrary - C++ Builder
Здравствуйте. Возникла проблема при динамической загрузке DLL в RAD Studio XE8. Не видит саму DLL (GetLastError упорно возвращает ошибку...

Повесить хук на LoadLibrary - C#
Добрых времени суток. Очень давно видел где-то информацию, что отследить инжект сторонней библиотеки в полезный процесс можно повесив хук...

Invoke + GetProcAddress & LoadLibrary - Assembler
Всем привет. Размышляю на тему обфускации. Решил переопределить стандартный макрос invoke, и снабдить его GetProcAddress /...

[Dll] Выполнение кода при LoadLibrary - Delphi
Delete :)

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Евгений М.
1035 / 976 / 54
Регистрация: 28.02.2010
Сообщений: 2,829
Завершенные тесты: 2
20.07.2011, 11:28     LoadLibrary #16
Цитата Сообщение от noob c++ Посмотреть сообщение
Может кто-то знает где либу прописать в VS 2010 Express ?
В 2008-ом так:
Проект - Свойства - Свойства конфигурации (из + в -) - Компоновщик - Ввод - Дополнительные зависимости
noob c++
3 / 3 / 0
Регистрация: 11.07.2011
Сообщений: 49
20.07.2011, 11:40  [ТС]     LoadLibrary #17
Цитата Сообщение от lazybiz Посмотреть сообщение
Напишите текст ошибки полностью. Имя неразрешенного элемента там должно быть написано.
1>------ Построение начато: проект: mydll, Конфигурация: Debug Win32 ------
1>LINK : error LNK2001: неразрешенный внешний символ "_WinMainCRTStartup"
1>C:\Users\admin\documents\visual studio 2010\Projects\mydll\Debug\mydll.exe : fatal error LNK1120: 1 неразрешенных внешних элементов
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========

Добавлено через 2 минуты
Цитата Сообщение от Евгений М. Посмотреть сообщение
В 2008-ом так:
Проект - Свойства - Свойства конфигурации (из + в -) - Компоновщик - Ввод - Дополнительные зависимости
Перешел в Дополнительные зависимости. В окне Унаследованные зависимости такой список:
Код
kernel32.lib
user32.lib
gdi32.lib
winspool.lib
comdlg32.lib
advapi32.lib
shell32.lib
ole32.lib
oleaut32.lib
uuid.lib
odbc32.lib
odbccp32.lib
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
20.07.2011, 11:47     LoadLibrary #18
Так бы сразу. Тебе нужно создать консольное а не GUI приложение.

Добавлено через 4 минуты
Это меняется примерно где-то Linker -> System -> SubSystem. Точно не помню, т.к. VS не пользуюсь.

Добавлено через 54 секунды
Библиотеки тут не при чем. Все необходимые для LoadLibrary по-умолчанию будут подключены.
noob c++
3 / 3 / 0
Регистрация: 11.07.2011
Сообщений: 49
20.07.2011, 12:01  [ТС]     LoadLibrary #19
Цитата Сообщение от lazybiz Посмотреть сообщение
Так бы сразу. Тебе нужно создать консольное а не GUI приложение.
Библиотеки тут не при чем. Все необходимые для LoadLibrary по-умолчанию будут подключены.
я создаю консольное приложение Win32 (пустое) и пишу в нем.
Результат :
C++
1
2
3
4
5
6
7
#include <windows.h>
 
int main()
{
        HMODULE myDLL = LoadLibrary("my.dll");
        return 0;
}
Код
1>------ Построение начато: проект: mydll2, Конфигурация: Debug Win32 ------
1>  mydll2.cpp
1>c:\users\admin\documents\visual studio 2010\projects\mydll2\mydll2\mydll2.cpp(6): error C2664: LoadLibraryW: невозможно преобразовать параметр 1 из "const char [7]" в "LPCWSTR"
1>          Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
Digit@ll
Brainsbreaker
881 / 359 / 30
Регистрация: 01.02.2011
Сообщений: 1,572
20.07.2011, 12:08     LoadLibrary #20
Та-а-к... Кажется нам кто-то начинает пудрить мозги... )
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
20.07.2011, 12:09     LoadLibrary #21
Цитата Сообщение от noob c++ Посмотреть сообщение
я создаю консольное приложение Win32 (пустое) и пишу в нем.
Это ты теперь создал консольное, до этого было GUI.
Но и тут ты просчитался, теперь ты создаешь Unicode а нужно ANSI.
noob c++
3 / 3 / 0
Регистрация: 11.07.2011
Сообщений: 49
20.07.2011, 12:12  [ТС]     LoadLibrary #22
Цитата Сообщение от lazybiz Посмотреть сообщение
Это ты теперь создал консольное, до этого было GUI.
Но и тут ты просчитался, теперь ты создаешь Unicode а нужно ANSI.
А где это выбирается в VS ?
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
20.07.2011, 12:15     LoadLibrary #23
Цитата Сообщение от noob c++ Посмотреть сообщение
Консольное приложение Win32 или Консольное приложение CLR ?
Win32
Dejust
49 / 49 / 1
Регистрация: 31.01.2011
Сообщений: 156
20.07.2011, 12:19     LoadLibrary #24
Цитата Сообщение от noob c++ Посмотреть сообщение
1>c:\users\admin\documents\visual studio 2010\projects\mydll2\mydll2\mydll2.cpp(6): error C2664: LoadLibraryW: невозможно преобразовать параметр 1 из "const char [7]" в "LPCWSTR"
C++
1
2
3
4
5
6
#include <windows.h>
 int main()
{
        HMODULE myDLL = LoadLibrary(L"my.dll");
        return 0;
}
Читай MSDN и пытайся хоть немного думать самостоятельно. Такие ошибки программист обязан уметь самостоятельно исправлять, тем более компилятор _явно_ указал в чем проблема
noob c++
3 / 3 / 0
Регистрация: 11.07.2011
Сообщений: 49
20.07.2011, 12:27  [ТС]     LoadLibrary #25
Цитата Сообщение от Dejust Посмотреть сообщение
Читай MSDN и пытайся хоть немного думать самостоятельно. Такие ошибки программист обязан уметь самостоятельно исправлять, тем более компилятор _явно_ указал в чем проблема
Может быть вам с первого взгляда все понятно. Я читаю книги и первым делом заглянул на MSDN прежде чем писать сам код. Не подскажете в чем сейчас проблема ? Создал все как писали выше, добавил код из вашего поста:

C++
1
2
3
4
5
6
#include <windows.h>
 int main()
{
        HMODULE myDLL = LoadLibrary(L"my.dll");
        return 0;
}
Код
1>------ Построение начато: проект: mydll3, Конфигурация: Debug Win32 ------
1>LINK : error LNK2001: неразрешенный внешний символ "_mainCRTStartup"
1>c:\users\admin\documents\visual studio 2010\Projects\mydll3\Debug\mydll3.exe : fatal error LNK1120: 1 неразрешенных внешних элементов
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
Dejust
49 / 49 / 1
Регистрация: 31.01.2011
Сообщений: 156
20.07.2011, 12:33     LoadLibrary #26
Ок. Возьми тот код который скомпилировался с ошибкой преобразования (в LPCWSTR) и добавь L перед строчкой

Мой код работает под обычное консольное приложение: Проект->Консольное приложение WIN 32 (В настройках "Консольное приложение" и "Пустой проект"

PS Не разрешенный внешний символ, как я понимаю, это такая функция которая _должна быть_ определена, но на момент компиляции этого сделано не было. В твоем случае это функция main, в зависимости от типа проекта у нее может быть разное имя (main, WinMain, ...)
noob c++
3 / 3 / 0
Регистрация: 11.07.2011
Сообщений: 49
20.07.2011, 13:15  [ТС]     LoadLibrary #27
Цитата Сообщение от Dejust Посмотреть сообщение
Мой код работает под обычное консольное приложение: Проект->Консольное приложение WIN 32 (В настройках "Консольное приложение" и "Пустой проект"
В том то и дело что я Создаю все именно так: Проект->Консольное приложение WIN 32 (В настройках "Консольное приложение" и "Пустой проект". Создаю в проекте файл .cpp и пишу в него ваш код:
C++
1
2
3
4
5
6
7
#include <windows.h>
 
int main()
{
        HMODULE myDLL = LoadLibrary(L"my.dll");
        return 0;
}
При компиляции вылетает ошибка:
Код
1>------ Построение начато: проект: mydll4, Конфигурация: Debug Win32 ------
1>LINK : error LNK2001: неразрешенный внешний символ "_mainCRTStartup"
1>c:\users\admin\documents\visual studio 2010\Projects\mydll4\Debug\mydll4.exe : fatal error LNK1120: 1 неразрешенных внешних элементов
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
У всех код компилируется, а у меня нет. Подобно как и с книгами - прочитаешь глав 5 и решаешь создать какое-то приложение. Пишешь код, а он не компилится. Смотришь в книге - все правильно! Но компилятор не хочет это принимать, т.к. в книге все по старому. Хоть 2008 не качай или билдер вообще
Paporotnik
383 / 227 / 7
Регистрация: 06.07.2011
Сообщений: 512
20.07.2011, 13:18     LoadLibrary #28
ради интереса пробовал указывать полный путь к dll'ке?
soft.creator
104 / 104 / 4
Регистрация: 17.10.2010
Сообщений: 283
20.07.2011, 13:19     LoadLibrary #29
В Windows есть две версии стандартных библиотек - для ansi и для юникода
У Вас выбран сейчас юникод, поэтому нужно определить не функцию main, а функцию wmain
Вообще в таких случаях лучше писать

C++
1
2
3
4
5
6
7
#include <windows.h>
#include <tchar.h>
void _tmain()
{
     HMODULE hModule = LoadLibrary(_T("my.dll"));
     return 0;
}
Здесь макрос _tmain подставит нужную версию main, а _T() - нужный вид строки
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.07.2011, 13:44     LoadLibrary
Еще ссылки по теме:

Простейший DLL на С и его loadlibrary in matlab - Matlab
В VC 2010 создаю пустой консольный проект dll Вот вот простейшие три функции targ1.cpp #include &lt;windows.h&gt; #include &lt;iostream&gt; ...

Код ошибки 127 после вызова LoadLibrary - C++ WinAPI
SetLastError(0); hLIB = LoadLibrary((LPCSTR)&quot;MSVCR120.DLL&quot;); fprintf(stderr, &quot;Code of error%d\n&quot;, GetLastError()); ...

LoadLibrary, error 997(Overlapped I/O operation is in progress) - Программирование
Доброе время суток! Метод web-службы. Что значит &quot;перекрытие I/O операций&quot; и почему оно происходит при загрузке dll. Кто знает,...

Окно с сообщением об ошибке "LoadLibrary failed with error 87: Параметр задан неверно." - Windows 7
Кароче от такая ошибка не знаю куда обратится пол нета перерил кто может плз помогите


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

Или воспользуйтесь поиском по форуму:
noob c++
3 / 3 / 0
Регистрация: 11.07.2011
Сообщений: 49
20.07.2011, 13:44  [ТС]     LoadLibrary #30
попробовал код выше:
C++
1
2
3
4
5
6
7
8
#include <windows.h>
#include <tchar.h>
 
void _tmain()
{
     HMODULE hModule = LoadLibrary(_T("my.dll"));
     return 0;
}
Код
1>------ Построение начато: проект: mydll4, Конфигурация: Debug Win32 ------
1>LINK : error LNK2001: неразрешенный внешний символ "_mainCRTStartup"
1>C:\Users\admin\documents\visual studio 2010\Projects\mydll4\Debug\mydll4.exe : fatal error LNK1120: 1 неразрешенных внешних элементов
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
Добавлено через 20 минут
Цитата Сообщение от Paporotnik Посмотреть сообщение
ради интереса пробовал указывать полный путь к dll'ке?
ради интереса создал пустую длл'ку и закинул ее в каталог с проектом:
C:\Users\admin\documents\visual studio 2010\Projects\mydll4\

Написал так:
C++
1
2
3
4
5
6
7
8
#include <windows.h>
#include <tchar.h>
 
void _tmain()
{
     HMODULE hModule = LoadLibrary(_T("C:\Users\admin\documents\visual studio 2010\Projects\mydll4\my.dll"));
     return 0;
}
Та же ошибка:
Код
1>------ Построение начато: проект: mydll4, Конфигурация: Debug Win32 ------
1>LINK : error LNK2001: неразрешенный внешний символ "_mainCRTStartup"
1>C:\Users\admin\documents\visual studio 2010\Projects\mydll4\Debug\mydll4.exe : fatal error LNK1120: 1 неразрешенных внешних элементов
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
Yandex
Объявления
20.07.2011, 13:44     LoadLibrary
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru