Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Для новичков > подключение динамической библиотеки |
Автор: шарлотта 1.3.2017, 18:00 |
Здравствуйте! Нужно подключить динамическую библиотеку неявно и явно к программе в Visual 2008. В динамической библиотеке в sort_mas_merge2.h файле указываю #pragma once #ifdef IS_CREATING_DLL #define IMPORT_EXPORT_TRIGER extern "C" __declspec(dllexport) #else #define IMPORT_EXPORT_TRIGER extern "C" __declspec(dllimport) #endif IMPORT_EXPORT_TRIGER void MergeSort(int *mas, int first, int last); в файле sort_mas_merge2.сpp находятся 2 функции - слияния и сортировки слиянием. Динамическая библиотека создается. Когда подключаю неявно, пишу #include "stdafx.h" #include "sort_mas_merge2.h" #include <iostream> #include <time.h> #include <conio.h> using namespace std; #pragma comment (lib, "sort_mas_merge2.lib") и выдает ошибку fatal error C1083: Не удается открыть файл include: sort_mas_merge2.h: No such file or directory. Почему возникает эта ошибка и что сделать для ее исправления? Когда подключаю явно, пишу #include "stdafx.h" #include <iostream> #include <windows.h> #include <time.h> #include <conio.h> using namespace std; void (*fun) (int*, int, int); в функции main HMODULE h = LoadLibrary(TEXT("sort_mas_merge2.d ll")); (FARPROC &) fun = GetProcAddress(h, "MergeSort"); if (h == NULL) { puts ("Ошибка"); } else { puts ("Библиотека подключена"); } и потом fun(mas, 0, n - 1); FreeLibrary(h); Выдает "Ошибка", т.е. подключения библиотеки не происходит. Что нужно исправить? Буду очень благодарна за помощь! |
Автор: vol4ek 1.3.2017, 19:18 | ||||||
sort_mas_merge2.lib и sort_mas_merge2.h бросаете в папку проекта где .cpp и .h файлы? Добавлено через 2 минуты и 3 секунды
положите dll в одну папку с exe Добавлено через 3 минуты и 17 секунд
надеюсь это просто опечатка на форуме, а в коде все ок |
Автор: шарлотта 1.3.2017, 19:36 | ||||||
Нет, динамическая библиотека находится в другой папке.
А возможно ли подключение, когда библиотека и проект находятся в разных папках?
да, здесь все нормально |
Автор: vol4ek 1.3.2017, 19:49 | ||||||
прописать полностью путь к dll. есть еще вариант с регистрацией dll в системе Добавлено через 6 минут и 16 секунд
вы меня не поняли наверное. у Вас есть проект вашей dll. после компиляции получились файлы mydll.dll, mydll.lib, mydll.h файлы mydll.lib и mydll.h скопируйте в папку проекта вашего приложения (туда, где лежат .cpp и .h файлы) потом уже используйте
|
Автор: шарлотта 2.3.2017, 21:10 | ||||
То есть в случае неявного подключения я должна в свойствах в Компоновщике указать Общие -Дополнительные каталоги библиотек - путь до dll и в Компоновщик -Ввод - Дополнительные зависимости - имя dll библиотеки? Выдает ошибку fatal error LNK1107: недопустимый или поврежденный файл: не удается прочитать по 0x2F8
Здесь тоже аналогичный вопрос, возможно ли подключение, когда библиотека и проект находятся в разных папках? |
Автор: vol4ek 2.3.2017, 21:25 | ||
нет. полный путь при явном подключении. при неявном либо dll находится в одной папке с exe который ее использует либо в путях поиска по умолчанию (переменная PATH в винде). также можете зарегистрировать dll в системе regsvr32 из консоли либо DllRegisterServer() из программы. Может есть еще какие-то способы но мне о них неизвестно |
Автор: шарлотта 2.3.2017, 21:28 |
Да, не так написала. В случае явного подключения выдает такую ошибку |
Автор: vol4ek 2.3.2017, 21:33 | ||
вот что я имею ввиду полного пути к dll при явном подключении
|
Автор: шарлотта 2.3.2017, 21:42 |
В этом случае все равно выводит "Ошибка" |
Автор: vol4ek 2.3.2017, 21:44 |
интересно. дайте код dll и приложения |
Автор: шарлотта 2.3.2017, 21:51 |
Это создание библиотеки |
Автор: шарлотта 2.3.2017, 21:52 |
Заголовочный файл |
Автор: шарлотта 2.3.2017, 21:53 |
Приложение, вызывающее библиотеку |
Автор: vol4ek 2.3.2017, 22:28 |
открывайте .slh и смотрите |
Автор: vol4ek 2.3.2017, 22:29 |
явное подключение в папке Release dll и exe |
Автор: vol4ek 2.3.2017, 22:37 | ||||||
неявное подключение Добавлено через 3 минуты и 9 секунд
Добавлено через 4 минуты и 38 секунд
|
Автор: vol4ek 2.3.2017, 22:53 |
функции не проверял, только беглый просмотр на синтаксические ошибки Добавлено через 2 минуты и 43 секунды у меня там опечатка есть в названии функции MergeSort |
Автор: шарлотта 3.3.2017, 00:18 |
Большое Вам спасибо! Постараюсь разобраться. |
Автор: шарлотта 6.3.2017, 00:37 |
К сожалению, так и не смогла понять, в чем была ошибка. Скопировала файлы .h и .lib в папку с приложением. Выдает fatal error LNK1104: не удается открыть файл ''I:\информатика.obj''. А при явном подключении по-прежнему выдает: "Ошибка". А что надо было поправить в моей исходной программе? |
Автор: vol4ek 6.3.2017, 08:01 |
.h и .lib нужно копировать не в папку приложения, а в папку проекта. в папку приложения нужно копировать .dll вызовите GetLastError() после LoadLibrary() мои проекты у вас тоже не собираются? Добавлено через 3 минуты и 21 секунду меня смущают иероглифы в строках в ваших исходниках. писали сами или откудато взяли? Добавлено через 5 минут и 32 секунды попробуйте собрать вот этот с неявным подключением. проект в аттаче. |
Автор: шарлотта 9.3.2017, 20:12 |
Большое спасибо Вам за помощь! Удалось подключить динамическую библиотеку! |
Автор: vol4ek 9.3.2017, 20:41 |
как решили? |
Автор: шарлотта 9.3.2017, 21:44 |
При неявном подключении создала новый проект, и ошибки не выдало. При явном добавила GetLastError(). |