Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
W0lfdalE
7 / 7 / 0
Регистрация: 03.07.2013
Сообщений: 26
#1

Ошибка подключения динамической библиотеки VS 2013 - C++

18.11.2013, 02:43. Просмотров 732. Ответов 7
Метки нет (Все метки)

Делаю всё по руководству: http://msdn.microsoft.com/ru-RU/library/ms235636.aspx
В результате получаю:
Код
1>------ Сборка начата: проект: BubbleSortDll, Конфигурация: Debug Win32 ------
1>  stdafx.cpp
1>  BubbleSortDll.cpp
1>c:\users\w0lfdale\documents\visual studio 2013\projects\bubblesortdll\bubblesort\bubblesortdll.cpp(27): error C2491: BubbleSortDll::BubbleSortMethod::sort: определение dllimport функция не разрешено
2>------ Сборка начата: проект: DllUsage, Конфигурация: Debug Win32 ------
2>  stdafx.cpp
2>  DllUsage.cpp
2>  Создание кода...
2>LINK : fatal error LNK1104: не удается открыть файл "c:\users\w0lfdale\documents\visual studio 2013\Projects\BubbleSortDll\Debug\BubbleSortDll.lib"
========== Сборка: успешно: 0, с ошибками: 2, без изменений: 0, пропущено: 0 ==========
Как решить эту проблему? Странно то, что указываю файл .dll, а не удается открыть .lib. Я так понимаю, суть в этом.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.11.2013, 02:43
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка подключения динамической библиотеки VS 2013 (C++):

Вызов функции одной динамической библиотеки из другой динамической библиотеки - C++
Добрый день! Помогите пожалуйста разобраться со следующим вопросом. Возможно ли из одной библиотеки передать параметры для...

Ошибка при подключении динамической библиотеки - C++
Всем привет! Помогите пожалуйста разобраться со следующим: Установил библиотеку cURL, раскидав либы и длл файлы по нужным папкам....

Подключение динамической библиотеки - C++
Всем доброго времени суток. Передо-мной стоит задача подключения собственно написанной библиотеки. И дело в том что я понятие не имею как...

Внедрение динамической библиотеки - C++
#include <windows.h> #include <tlhelp32.h> LRESULT CALLBACK WindowProcedure (HWND,UINT,WPARAM,LPARAM); char szClassName = "0"; ...

Создание динамической библиотеки сортировок - C++
Всем привет, дали задание создать динамическую библиотеку с сортировками bubble и Quick. Я делаю в компиляторе dev с++ dllmain.c ...

Вместо динамической библиотеки собирается статическая - C++
Добрый день! У меня вместо динамической библиотеки собирается статическая. в makefile указан ключ P_SHAREDLIB=1 сборка ...

7
Max Dark
шКодер самоучка
1852 / 1652 / 603
Регистрация: 09.10.2013
Сообщений: 3,678
Записей в блоге: 6
Завершенные тесты: 2
18.11.2013, 02:50 #2
Выложите сюда ваши исходники
Скорее всего у вас проблема в настройках проекта с библиотекой
0
stima
491 / 341 / 40
Регистрация: 22.03.2011
Сообщений: 1,096
Завершенные тесты: 2
18.11.2013, 02:58 #3
Не совсем. При сборке dll у вас должно получится 2 файла: .dll и .lib. Я думаю проблема в этом:

C++
1
bubblesortdll.cpp(27): error C2491: BubbleSortDll::BubbleSortMethod::sort: определение dllimport функция не разрешено
из-за этого не собирается dll и поэтому следующий проэкт использующий dll не может с ней слинковатся.

Добавлено через 2 минуты
п.с. Покажите код.
0
W0lfdalE
7 / 7 / 0
Регистрация: 03.07.2013
Сообщений: 26
18.11.2013, 03:01  [ТС] #4
http://rghost.ru/download/private/50...bleSortDll.zip

BubbleSortDll.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#ifdef BUBBLESORTDLL_EXPORTS
#define BUBBLESORTDLL_API __declspec(dllexport) 
#else
#define BUBBLESORTDLL_API __declspec(dllimport) 
#endif
 
namespace BubbleSortDll
{
    class BubbleSortMethod
    {
    public:
        template <typename T>
        static BUBBLESORTDLL_API int sort(T*, int);
    };
}
BubbleSortDll.cpp
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
// BubbleSort.cpp: определяет экспортированные функции для приложения DLL.
//
 
#include "stdafx.h"
#include "BubbleSortDll.h"
#include <stdexcept>
 
namespace BubbleSortDll
{
    template <typename T>
    int BubbleSortMethod::sort(T* x, int n)
    {
        T temp;
 
        for (int i = 0; i < n; i++){
            for (int j = 0; j < n - 1; j++){
                if (a[j] < a[i])
                {
                    temp = a[j];
                    a[j] = a[i];
                    a[i] = temp;
                }
            }
        }
 
        return 0;
    }
};
DllUsage.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// DllUsage.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <iostream>
#include "BubbleSortDll.h"
 
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    int a[5] = {0, -1, 1, -2, 2};
    BubbleSortDll::BubbleSortMethod::sort(a, 5);
    for (int i = 0; i < 5; i++) cout << a[i] << " ";
    return 0;
}
0
stima
491 / 341 / 40
Регистрация: 22.03.2011
Сообщений: 1,096
Завершенные тесты: 2
18.11.2013, 03:09 #5
Я вам скажу так. Вы поначалу разберитесь зачем нужны классы, а то у Вас получается класс с неймпейсом для 1 метода (или Вы джавист?). Потом выучите, что такое шаблоны. Когда разберетесь с этмм, возможно Вы уже не захочете экспорить 1 метод из dll. Еще хочете? Ну тогда читайте как специализировать шаблон.
0
W0lfdalE
7 / 7 / 0
Регистрация: 03.07.2013
Сообщений: 26
18.11.2013, 03:16  [ТС] #6
Да, я джавист, но не в этом дело. В чем дело - мне задали в универе написать dll с методом сортировки пузырьком и программу, которая эту самую dll использует. Нашел, как мне кажется, самый подходящий по условию задачи гайд. И в данном случае я не хочу вдаваться в детали, а просто хочу решить поставленную задачу.
0
Max Dark
шКодер самоучка
1852 / 1652 / 603
Регистрация: 09.10.2013
Сообщений: 3,678
Записей в блоге: 6
Завершенные тесты: 2
18.11.2013, 03:23 #7
добавьте первой строчкой в файл BubbleSort.cpp
C++
1
#define BUBBLESORTDLL_EXPORTS
либо в настройках компилятора для проекта BubleSort добавьте /DBUBBLESORTDLL_EXPORTS
но проще 1й вариант

Добавлено через 6 минут
только заметил, что у вас шаблон...

в С++ шаблоны должны быть полностью объявлены в заголовочном(*.h) файле
поместить их в dll у вас не выйдет, так как исполняемый код для шаблонов создается только при объявлении переменной/вызове функции
1
W0lfdalE
7 / 7 / 0
Регистрация: 03.07.2013
Сообщений: 26
18.11.2013, 03:41  [ТС] #8
Добавил в cpp - ошибка. Добавил в .h - помогло, dll построило. Но, DllUsage опять ищет .lib. В папке debug решения BubbleSortDll три файла - BubbleSortDll.dll, .ilc и .pdb.

Добавлено через 14 минут
Работает, спасибо, Cra3y. Но пришлось немного схитрить - построить .lib, сохранить его, перестроить dll, и скопировать lib в папку с dll.
0
18.11.2013, 03:41
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.11.2013, 03:41
Привет! Вот еще темы с ответами:

Почему не передаются данные из динамической библиотеки? - C++
Когда я возвращаю указатель из функции, программа получает его вместе с данными. Динамическая библиотека: __declspec(dllexport) RGBQUAD...

Передача аргументов в функцию динамической библиотеки - C++
И снова здравствуйте. Я пытаюсь написать универсальный класс, который позволит мне обращаться к любым функциям динамических билиотек. ...

Создание динамической библиотеки (dll) в Dev C++ - C++
Кто умеет создавать dll библиотеки в Dev C++, вопрос к вам. Дело в том что я умею создавать header файлы, то бишь заголовочные, но в виду...

Не видит <windows.h> в заголовочном файле динамической библиотеки - C++
Приветствую. Вопрос в теме.


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

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