Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.61/18: Рейтинг темы: голосов - 18, средняя оценка - 4.61
 Аватар для Виктор_Сен
36 / 29 / 2
Регистрация: 01.08.2011
Сообщений: 176

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

23.10.2011, 22:14. Показов 3795. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Хотел неявно подключить к С++ библиотеку, написанную на асме. Прочитал статью http://www.rsdn.ru/article/baseserv/dlluse.xml, и сделал, как там написано. Библиотеку писал сам, называется "MemManager.dll", там одна функция: __int64 Sum(__int64,__int64); Написал файл MemManager.h:
C++
1
2
3
4
5
6
7
8
9
#pragma comment(lib,"MemManager.lib")
 
#ifdef MYDLL_EXPORTS
#define MYDLL_API __declspec(dllexport)
#else
#define MYDLL_API __declspec(dllimport)
#endif
 
MYDLL_API __int64 Sum(__int64 a, __int64 b);
Пробовал добавлять lib файл в проект, тоже не помогло. Пишет что есть неразрешённые внешние элементы. Помогите!

Добавлено через 53 секунды
С явным подключением проблем не было
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.10.2011, 22:14
Ответы с готовыми решениями:

подключение библиотеки
помогите подключить библиотеку header. какой не ввожу кож пишет ошибку, мне сказали что у меня не подключена библиотека помогите кто...

Подключение библиотеки
Работаю в visual studio. Нашел библиотеку для работы с большими числами:bigint Там cpp и h файлы. Я их добавил в проект, когда в своем cpp...

подключение библиотеки
доброго времени суток, при подключении библиотеки #pragma comment(lib, "OpenGL.lib") (все это проделываю в visual c++) необходимо ли...

12
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
23.10.2011, 22:38
Виктор_Сен, посмотри через dumpbin /exports так ли функция называется как ищет ее линковщик
0
 Аватар для Виктор_Сен
36 / 29 / 2
Регистрация: 01.08.2011
Сообщений: 176
23.10.2011, 23:01  [ТС]
Ну раз с явным подключением проблем не было, значит имя функции правильное. Ну я всё равно проверил через dumpbin /exports, но он мне ничего внятного не выдал, вот скрин:
Миниатюры
Неявное подключение библиотеки  
0
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
23.10.2011, 23:05
Виктор_Сен, а как явно подключали?
в этой dll нет экспортированных символов
в проекте dll вы объявляли MYDLL_EXPORTS?
0
 Аватар для Виктор_Сен
36 / 29 / 2
Регистрация: 01.08.2011
Сообщений: 176
23.10.2011, 23:18  [ТС]
Тут дело вот ещё может быть в чём: dll 64 разрядная и написана на ассемблере, а программа dumpbin у меня из масма 32 разрядного C:\Masm32\bin\bumpbin.exe

А подключал я её вот так, и всё работало:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
//Функция Sum будет иметь 2 целочисленных, возвращать она будет целое число
typedef __int64 (*pSum)(__int64, __int64);
 
int _tmain(int argc, _TCHAR* argv[])
{
    //Переменные для суммы
    __int64 a, b, r = 0;
 
    //Адрес DLL-модуля
    HMODULE hModule;
    //Адрес фунцкии вычисления адреса
    pSum Sum;
 
    //Загрузка DLL в адресное пространство процесса
    hModule = LoadLibraryA("MemManager.dll");
    //Получения адреса функции с именем Sum
    Sum = (pSum)GetProcAddress(hModule, "Sum");
        
    cout << "A = ";
    cin >> a;   
    cout << "B = ";
    cin >> b;   
 
    //Вычислени суммы
    r = Sum(a, b);
 
    cout << "Result = " << r << endl;
 
    //Выгрузка DLL
    FreeLibrary(hModule);
 
    _getch();
 
    return 0;
}
Вот сама dll:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
.CODE
 
DllMain PROC
    mov rax,1
    ret
DllMain ENDP
 
Sum PROC
    mov rax,rcx
    add rax,rdx
    ret
Sum ENDP
 
END
Компилировал я её масмом 64 вот так: ml64 MemManager.asm /link /OUT:"MemManager.dll" /DLL /entryllMain /DEF:MemManager.def /SUBSYSTEM:CONSOLE
0
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
23.10.2011, 23:21
Цитата Сообщение от Виктор_Сен Посмотреть сообщение
DEF:MemManager.def
там функция прописана?

Добавлено через 1 минуту
Цитата Сообщение от Виктор_Сен Посмотреть сообщение
dumpbin у меня из масма 32 разрядного C:\Masm32\bin\bumpbin.exe
ну логично было бы использовать dumpbin студии
0
 Аватар для Виктор_Сен
36 / 29 / 2
Регистрация: 01.08.2011
Сообщений: 176
23.10.2011, 23:22  [ТС]
Вот MemManager.def:
LIBRARY MemManager
EXPORTS Sum @1
0
 Аватар для Виктор_Сен
36 / 29 / 2
Регистрация: 01.08.2011
Сообщений: 176
23.10.2011, 23:26  [ТС]
dumpbin студии пишет, что нехватает библиотеки
Миниатюры
Неявное подключение библиотеки  
0
 Аватар для Виктор_Сен
36 / 29 / 2
Регистрация: 01.08.2011
Сообщений: 176
23.10.2011, 23:31  [ТС]
Нашёл в интернете библиотеку mspdb100.dll, dumpbin студии запустился:
Миниатюры
Неявное подключение библиотеки  
0
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
23.10.2011, 23:33
таки /exports
0
 Аватар для Виктор_Сен
36 / 29 / 2
Регистрация: 01.08.2011
Сообщений: 176
23.10.2011, 23:34  [ТС]
Ой, я тут ошибся. Вот правильный скрин:
Миниатюры
Неявное подключение библиотеки  
0
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
23.10.2011, 23:36
а что линковщик пишет, хотя с этого надо было начинать
0
 Аватар для Виктор_Сен
36 / 29 / 2
Регистрация: 01.08.2011
Сообщений: 176
24.10.2011, 00:51  [ТС]
Ошибка 1 error LNK2019: ссылка на неразрешенный внешний символ "__declspec(dllimport) __int64 __cdecl Sum(__int64,__int64)" (__imp_?Sum@@YA_J_J0@Z) в функции wmain D:\doc\dev\Visual Studio 2010\TestDLL\TestDLL\TestDLL.obj TestDLL

Добавлено через 1 час 1 минуту
Меня насторожила вот эта строчка: ?Sum@@YA_J_J0@Z, то есть, как я понял, компилятор в таком виде ищет функцию в dll. Тогда я перекомпилировал dll с таким корявым названием функции, и заработало. Только некрасиво получилось. И возникает вопрос: могу ли я заставить компилятор не кодировать имя функции?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.10.2011, 00:51
Помогаю со студенческими работами здесь

Подключение библиотеки
Хотел подключить библиотеку в VisualStudio, но наткнулся на такую проблему: по идее в папке &quot;VC&quot; должны лежать папки такие как...

Подключение библиотеки к VS C++
Доброго времени суток! Я пишу проект на C++ и использую библиотеку SFML 2.3.2 C++(Она работает нормально) Также использую Windows XP и...

Подключение библиотеки
Читаю Макса Шлее(2007 год), там в программах подключается #include &lt;QtGui&gt; и все любые виджеты используется, а у мне каждый виджет вручную...

подключение библиотеки
Здравствуйте! Пытаюсь подключить к проекту библиотеку ftd2xx, есть файлы .lib .h .dll Прошу прощения, так как этот вопрос уже не раз...

Подключение библиотеки Qt
Как подключить библиотеку Qt? Например я хочу включить QtCore в свой проект. #include &lt;QtCore&gt; int main() { ...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru