Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> подключение динамической библиотеки, как подключить динамическую библиотеку 
:(
    Опции темы
шарлотта
Дата 1.3.2017, 18:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 1.3.2017

Репутация: нет
Всего: нет



Здравствуйте! Нужно подключить динамическую библиотеку неявно и явно к программе в 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);
Выдает "Ошибка", т.е. подключения библиотеки не происходит.
Что нужно исправить?
Буду очень благодарна за помощь! 
PM MAIL   Вверх
vol4ek
Дата 1.3.2017, 19:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


конь в пальто
**


Профиль
Группа: Участник
Сообщений: 304
Регистрация: 1.5.2011
Где: Минск

Репутация: нет
Всего: 0



Цитата(шарлотта @ 1.3.2017,  18:00)

Когда подключаю неявно, пишу
#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.
Почему возникает эта ошибка и что сделать для ее исправления?

sort_mas_merge2.lib и sort_mas_merge2.h бросаете в папку проекта где .cpp и .h файлы?

Добавлено через 2 минуты и 3 секунды
Цитата(шарлотта @ 1.3.2017,  18:00)
Когда подключаю явно



положите dll в одну папку с exe

Добавлено через 3 минуты и 17 секунд
Цитата(шарлотта @ 1.3.2017,  18:00)
HMODULE h = LoadLibrary(TEXT("sort_mas_merge2.d ll"));

надеюсь это просто опечатка на форуме, а в коде все ок
PM MAIL ICQ   Вверх
шарлотта
Дата 1.3.2017, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 1.3.2017

Репутация: нет
Всего: нет



Цитата

sort_mas_merge2.lib и sort_mas_merge2.h бросаете в папку проекта где .cpp и .h файлы?

Нет, динамическая библиотека находится в другой папке.
Цитата

положите dll в одну папку с exe

А возможно ли подключение, когда библиотека и проект находятся в разных папках?
Цитата

надеюсь это просто опечатка на форуме, а в коде все ок 

да, здесь все нормально
PM MAIL   Вверх
vol4ek
Дата 1.3.2017, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


конь в пальто
**


Профиль
Группа: Участник
Сообщений: 304
Регистрация: 1.5.2011
Где: Минск

Репутация: нет
Всего: 0



Цитата(шарлотта @ 1.3.2017,  19:36)
А возможно ли подключение, когда библиотека и проект находятся в разных папках?

прописать полностью путь к dll. есть еще вариант с регистрацией dll в системе

Добавлено через 6 минут и 16 секунд
Цитата(шарлотта @ 1.3.2017,  19:36)
sort_mas_merge2.lib и sort_mas_merge2.h бросаете в папку проекта где .cpp и .h файлы?

вы меня не поняли наверное.
у Вас есть проект вашей dll. после компиляции получились файлы mydll.dll, mydll.lib, mydll.h
файлы mydll.lib и mydll.h скопируйте в папку проекта вашего приложения (туда, где лежат .cpp и .h файлы)
потом уже используйте
Код

#include "mydll.h"
#pragma comment (lib, "mydll.lib")


PM MAIL ICQ   Вверх
шарлотта
Дата 2.3.2017, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 1.3.2017

Репутация: нет
Всего: нет



Цитата

прописать полностью путь к dll. есть еще вариант с регистрацией dll в системе

То есть в случае неявного подключения я должна в свойствах в Компоновщике указать Общие -Дополнительные каталоги библиотек - путь до dll и в Компоновщик -Ввод - Дополнительные зависимости - имя dll библиотеки?
Выдает ошибку fatal error LNK1107: недопустимый или поврежденный файл: не удается прочитать по 0x2F8

Цитата

у Вас есть проект вашей dll. после компиляции получились файлы mydll.dll, mydll.lib, mydll.h
файлы mydll.lib и mydll.h скопируйте в папку проекта вашего приложения (туда, где лежат .cpp и .h файлы)
потом уже используйте

Здесь тоже аналогичный вопрос,  возможно ли подключение, когда библиотека и проект находятся в разных папках?

Это сообщение отредактировал(а) шарлотта - 2.3.2017, 21:19
PM MAIL   Вверх
vol4ek
Дата 2.3.2017, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


конь в пальто
**


Профиль
Группа: Участник
Сообщений: 304
Регистрация: 1.5.2011
Где: Минск

Репутация: нет
Всего: 0



Цитата(шарлотта @ 2.3.2017,  21:10)

То есть в случае неявного подключения я должна в свойствах в Компоновщике указать Общие -Дополнительные каталоги библиотек - путь до dll и в Компоновщик -Ввод - Дополнительные зависимости - имя dll библиотеки?
Выдает ошибку fatal error LNK1107: недопустимый или поврежденный файл: не удается прочитать по 0x2F8

нет. полный путь при явном подключении. при неявном либо dll находится в одной папке с exe который ее использует либо в путях поиска по умолчанию (переменная PATH в винде). также можете зарегистрировать dll в системе regsvr32 из консоли либо DllRegisterServer() из программы. Может есть еще какие-то способы но мне о них неизвестно
PM MAIL ICQ   Вверх
шарлотта
Дата 2.3.2017, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 1.3.2017

Репутация: нет
Всего: нет



Да, не так написала. В случае явного подключения выдает такую ошибку
PM MAIL   Вверх
vol4ek
Дата 2.3.2017, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


конь в пальто
**


Профиль
Группа: Участник
Сообщений: 304
Регистрация: 1.5.2011
Где: Минск

Репутация: нет
Всего: 0



вот что я имею ввиду полного пути к dll при явном подключении
Код

HISTANCE hlib = LoadLibrary("C:\\Project\\Debug\\MyDll.dll");

PM MAIL ICQ   Вверх
шарлотта
Дата 2.3.2017, 21:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 1.3.2017

Репутация: нет
Всего: нет



В этом случае все равно выводит "Ошибка"
PM MAIL   Вверх
vol4ek
Дата 2.3.2017, 21:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


конь в пальто
**


Профиль
Группа: Участник
Сообщений: 304
Регистрация: 1.5.2011
Где: Минск

Репутация: нет
Всего: 0



интересно. дайте код dll и приложения

PM MAIL ICQ   Вверх
шарлотта
Дата 2.3.2017, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 1.3.2017

Репутация: нет
Всего: нет



Это создание библиотеки

Это сообщение отредактировал(а) шарлотта - 10.3.2017, 17:12
PM MAIL   Вверх
шарлотта
Дата 2.3.2017, 21:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 1.3.2017

Репутация: нет
Всего: нет



Заголовочный файл

Это сообщение отредактировал(а) шарлотта - 10.3.2017, 17:12
PM MAIL   Вверх
шарлотта
Дата 2.3.2017, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 1.3.2017

Репутация: нет
Всего: нет



Приложение, вызывающее библиотеку

Это сообщение отредактировал(а) шарлотта - 10.3.2017, 17:12
PM MAIL   Вверх
vol4ek
Дата 2.3.2017, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


конь в пальто
**


Профиль
Группа: Участник
Сообщений: 304
Регистрация: 1.5.2011
Где: Минск

Репутация: нет
Всего: 0



открывайте .slh и смотрите

Присоединённый файл ( Кол-во скачиваний: 4 )
Присоединённый файл  MergeShortDLL.rar 255,60 Kb
PM MAIL ICQ   Вверх
vol4ek
Дата 2.3.2017, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


конь в пальто
**


Профиль
Группа: Участник
Сообщений: 304
Регистрация: 1.5.2011
Где: Минск

Репутация: нет
Всего: 0



явное подключение в папке Release dll и exe

Присоединённый файл ( Кол-во скачиваний: 6 )
Присоединённый файл  usedll.rar 254,77 Kb
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1690 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.