Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.93/46: Рейтинг темы: голосов - 46, средняя оценка - 4.93
 Аватар для noob c++
3 / 3 / 0
Регистрация: 11.07.2011
Сообщений: 49

LoadLibrary

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

Студворк — интернет-сервис помощи студентам
Здравствуйте
Нужно подгрузить мою .dll в память.

C++
1
2
3
#include <windows.h>
 
HMODULE myDLL = LoadLibraryA("my.dll");
не компилится (error LNK1120: 1 неразрешенных внешних элементов)
подскажите как исправить. новичек
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.07.2011, 09:36
Ответы с готовыми решениями:

LoadLibrary()
Вызываю LoadLibrary() (файл dll4.dll лежит в каталоге экзешника) HMODULE hdll1 = LoadLibraryA(&quot;dll4.dll&quot;); по...

Ошибка LoadLibrary
В папке TEMP лежит dll, которую я хочу подгрузить, но при вызове функции LoadLibrary возвращается ошибка 126. HMODULE hNSS = NULL; ...

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

58
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
20.07.2011, 12:09
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от noob c++ Посмотреть сообщение
я создаю консольное приложение Win32 (пустое) и пишу в нем.
Это ты теперь создал консольное, до этого было GUI.
Но и тут ты просчитался, теперь ты создаешь Unicode а нужно ANSI.
0
 Аватар для noob c++
3 / 3 / 0
Регистрация: 11.07.2011
Сообщений: 49
20.07.2011, 12:12  [ТС]
Цитата Сообщение от lazybiz Посмотреть сообщение
Это ты теперь создал консольное, до этого было GUI.
Но и тут ты просчитался, теперь ты создаешь Unicode а нужно ANSI.
А где это выбирается в VS ?
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
20.07.2011, 12:15
Цитата Сообщение от noob c++ Посмотреть сообщение
Консольное приложение Win32 или Консольное приложение CLR ?
Win32
0
 Аватар для Dejust
49 / 49 / 4
Регистрация: 31.01.2011
Сообщений: 156
20.07.2011, 12:19
Цитата Сообщение от 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 и пытайся хоть немного думать самостоятельно. Такие ошибки программист обязан уметь самостоятельно исправлять, тем более компилятор _явно_ указал в чем проблема
0
 Аватар для noob c++
3 / 3 / 0
Регистрация: 11.07.2011
Сообщений: 49
20.07.2011, 12:27  [ТС]
Цитата Сообщение от Dejust Посмотреть сообщение
Читай MSDN и пытайся хоть немного думать самостоятельно. Такие ошибки программист обязан уметь самостоятельно исправлять, тем более компилятор _явно_ указал в чем проблема
Может быть вам с первого взгляда все понятно. Я читаю книги и первым делом заглянул на MSDN прежде чем писать сам код. Не подскажете в чем сейчас проблема ? Создал все как писали выше, добавил код из вашего поста:

C++
1
2
3
4
5
6
#include <windows.h>
 int main()
{
        HMODULE myDLL = LoadLibrary(L"my.dll");
        return 0;
}
Code
1
2
3
4
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 ==========
0
 Аватар для Dejust
49 / 49 / 4
Регистрация: 31.01.2011
Сообщений: 156
20.07.2011, 12:33
Ок. Возьми тот код который скомпилировался с ошибкой преобразования (в LPCWSTR) и добавь L перед строчкой

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

PS Не разрешенный внешний символ, как я понимаю, это такая функция которая _должна быть_ определена, но на момент компиляции этого сделано не было. В твоем случае это функция main, в зависимости от типа проекта у нее может быть разное имя (main, WinMain, ...)
0
 Аватар для noob c++
3 / 3 / 0
Регистрация: 11.07.2011
Сообщений: 49
20.07.2011, 13:15  [ТС]
Цитата Сообщение от 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;
}
При компиляции вылетает ошибка:
Code
1
2
3
4
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 не качай или билдер вообще
0
385 / 229 / 12
Регистрация: 06.07.2011
Сообщений: 512
20.07.2011, 13:18
ради интереса пробовал указывать полный путь к dll'ке?
0
 Аватар для soft.creator
106 / 106 / 11
Регистрация: 17.10.2010
Сообщений: 283
20.07.2011, 13:19
В 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() - нужный вид строки
1
 Аватар для noob c++
3 / 3 / 0
Регистрация: 11.07.2011
Сообщений: 49
20.07.2011, 13:44  [ТС]
попробовал код выше:
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;
}
Code
1
2
3
4
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;
}
Та же ошибка:
Code
1
2
3
4
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 ==========
0
 Аватар для Dejust
49 / 49 / 4
Регистрация: 31.01.2011
Сообщений: 156
20.07.2011, 13:54
noob c++, проблема не в подключении DLL, а в том что у тебя каким-то образом компоновщик не видит входную (main) функцию, хотя ты ее определил.

Попробуй поискать (первая ссылка с топиком о такой же проблеме). Тут к сожалению нельзя кидать ссылки на другие форумы
1
 Аватар для noob c++
3 / 3 / 0
Регистрация: 11.07.2011
Сообщений: 49
20.07.2011, 14:15  [ТС]
Пробежался по всем линкам и понял одно - лучше затереть 2010 и не парится. 2008 скачаю
0
 Аватар для soft.creator
106 / 106 / 11
Регистрация: 17.10.2010
Сообщений: 283
20.07.2011, 14:20
2010 - зло. Но проблема, думаю, не в студии.
Проект какой - console или win32?
0
 Аватар для noob c++
3 / 3 / 0
Регистрация: 11.07.2011
Сообщений: 49
20.07.2011, 14:41  [ТС]
Консольное win32
В VS 2010 так и написано
0
 Аватар для OstapBender
594 / 532 / 76
Регистрация: 22.03.2011
Сообщений: 1,585
20.07.2011, 14:50
у меня в 2010 студии всё работает
C
1
2
3
4
5
6
7
8
9
10
11
12
13
int main()
{
    HMODULE myDLL = LoadLibraryA("D:\\bass.dll");
    if (!myDLL) {
        puts("error loading dll.");
    }
    else {
        puts("loaded.");
    }
 
    getchar();
    return 0;
}
loaded. пишет при валидной дллке.
1
 Аватар для Melzas
38 / 38 / 6
Регистрация: 20.07.2011
Сообщений: 88
20.07.2011, 14:55
Странно, что у вас не компилируется. Попробуйте с WinMain написать:
C++
1
2
3
4
5
6
#include <Windows.h>
int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    HMODULE hModule=LoadLibrary(L"my.dll");
    return 0;
}
1
 Аватар для noob c++
3 / 3 / 0
Регистрация: 11.07.2011
Сообщений: 49
20.07.2011, 15:03  [ТС]
Цитата Сообщение от OstapBender Посмотреть сообщение
у меня в 2010 студии всё работает
C
1
2
3
4
5
6
7
8
9
10
11
12
13
int main()
{
    HMODULE myDLL = LoadLibraryA("D:\\bass.dll");
    if (!myDLL) {
        puts("error loading dll.");
    }
    else {
        puts("loaded.");
    }
 
    getchar();
    return 0;
}
loaded. пишет при валидной дллке.
Тоесть проблема в моем коде. Если мой не правильный, то немогли бы вы прокоментировать свой (что и зачем добавляете), очень хочется разобраться. Буду вам признателен.
0
 Аватар для soft.creator
106 / 106 / 11
Регистрация: 17.10.2010
Сообщений: 283
20.07.2011, 15:09
Попробуйте создать с нуля консольный проект hello, world, все настройки по умолчанию.
Убедитесь, что он компилируется и запускается.
Потом попробуйте мой код из постов выше.
Такое впечатление, что некорректны настройки проекта
1
2 / 2 / 0
Регистрация: 17.07.2011
Сообщений: 20
20.07.2011, 15:12
noob c++, попробуй еще измени тут параметр (когда был глюк что ничего не компилилось, помогло. Этот же параметр дает возможность запуска проги на другом компе):
Проект->Свойства->Свойства конфигурации->C/C++->Создание кода->Многопоточная отладка (/MTd).
Как на англ. не знаю...
1
 Аватар для noob c++
3 / 3 / 0
Регистрация: 11.07.2011
Сообщений: 49
20.07.2011, 16:43  [ТС]
Цитата Сообщение от Melzas Посмотреть сообщение
Странно, что у вас не компилируется. Попробуйте с WinMain написать:
C++
1
2
3
4
5
6
#include <Windows.h>
int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    HMODULE hModule=LoadLibrary(L"my.dll");
    return 0;
}
Прокоментируйте пожалуйста свой код. Много там всего того что я не знаю. Очень интересно. Спасибо

Добавлено через 4 минуты
p.s. завтра утром попробую все варианты предложенные выше и отпишусь.
Всем спасибо за помощь
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.07.2011, 16:43

LoadLibrary возвращает 0
Добрый вечер. Прошу помощи у знающих людей. Есть нативная dll,которую нужно использовать в шарпе. static class NativeMethods ...

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

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

LoadLibrary не загружает dll
Здравствуйте. Вот такой код HINSTANCE hLib; int Error = GetLastError(); hLib =...

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


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru