Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
W0lfdalE
7 / 7 / 0
Регистрация: 03.07.2013
Сообщений: 26
18.11.2013, 02:43     Ошибка подключения динамической библиотеки VS 2013 #1
Делаю всё по руководству: 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. Я так понимаю, суть в этом.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Max Dark
В поиске работы
 Аватар для Max Dark
1546 / 1399 / 501
Регистрация: 09.10.2013
Сообщений: 3,185
Записей в блоге: 8
Завершенные тесты: 2
18.11.2013, 02:50     Ошибка подключения динамической библиотеки VS 2013 #2
Выложите сюда ваши исходники
Скорее всего у вас проблема в настройках проекта с библиотекой
stima
430 / 285 / 16
Регистрация: 22.03.2011
Сообщений: 929
Завершенные тесты: 1
18.11.2013, 02:58     Ошибка подключения динамической библиотеки VS 2013 #3
Не совсем. При сборке dll у вас должно получится 2 файла: .dll и .lib. Я думаю проблема в этом:

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

Добавлено через 2 минуты
п.с. Покажите код.
W0lfdalE
7 / 7 / 0
Регистрация: 03.07.2013
Сообщений: 26
18.11.2013, 03:01  [ТС]     Ошибка подключения динамической библиотеки VS 2013 #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;
}
stima
430 / 285 / 16
Регистрация: 22.03.2011
Сообщений: 929
Завершенные тесты: 1
18.11.2013, 03:09     Ошибка подключения динамической библиотеки VS 2013 #5
Я вам скажу так. Вы поначалу разберитесь зачем нужны классы, а то у Вас получается класс с неймпейсом для 1 метода (или Вы джавист?). Потом выучите, что такое шаблоны. Когда разберетесь с этмм, возможно Вы уже не захочете экспорить 1 метод из dll. Еще хочете? Ну тогда читайте как специализировать шаблон.
W0lfdalE
7 / 7 / 0
Регистрация: 03.07.2013
Сообщений: 26
18.11.2013, 03:16  [ТС]     Ошибка подключения динамической библиотеки VS 2013 #6
Да, я джавист, но не в этом дело. В чем дело - мне задали в универе написать dll с методом сортировки пузырьком и программу, которая эту самую dll использует. Нашел, как мне кажется, самый подходящий по условию задачи гайд. И в данном случае я не хочу вдаваться в детали, а просто хочу решить поставленную задачу.
Max Dark
В поиске работы
 Аватар для Max Dark
1546 / 1399 / 501
Регистрация: 09.10.2013
Сообщений: 3,185
Записей в блоге: 8
Завершенные тесты: 2
18.11.2013, 03:23     Ошибка подключения динамической библиотеки VS 2013 #7
добавьте первой строчкой в файл BubbleSort.cpp
C++
1
#define BUBBLESORTDLL_EXPORTS
либо в настройках компилятора для проекта BubleSort добавьте /DBUBBLESORTDLL_EXPORTS
но проще 1й вариант

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

в С++ шаблоны должны быть полностью объявлены в заголовочном(*.h) файле
поместить их в dll у вас не выйдет, так как исполняемый код для шаблонов создается только при объявлении переменной/вызове функции
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.11.2013, 03:41     Ошибка подключения динамической библиотеки VS 2013
Еще ссылки по теме:

C++ Почему не передаются данные из динамической библиотеки?
Вызов функции одной динамической библиотеки из другой динамической библиотеки C++
Подключение сторонней библиотеки OpenCV в VS 2013 C++

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

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

Добавлено через 14 минут
Работает, спасибо, Cra3y. Но пришлось немного схитрить - построить .lib, сохранить его, перестроить dll, и скопировать lib в папку с dll.
Yandex
Объявления
18.11.2013, 03:41     Ошибка подключения динамической библиотеки VS 2013
Ответ Создать тему
Опции темы

Текущее время: 01:07. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru