Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.77/82: Рейтинг темы: голосов - 82, средняя оценка - 4.77
Заблокирован

Помогите с подключением dll к проекту

18.08.2011, 15:51. Показов 16325. Ответов 31
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! У меня имеется вот такая библиотека dll, сделанная в Win32:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// MyFirstDLL.h
 
namespace MyFirstDLL
{
    class MyFirst
    {
    public:
        // Returns a + b
        static __declspec(dllexport) double Add(double a, double b);
 
        // Returns a - b
        static __declspec(dllexport) double Subtract(double a, double b);
 
        // Returns a * b
        static __declspec(dllexport) double Multiply(double a, double b);
 
        // Returns a / b
        // Throws DivideByZeroException if b is 0
        static __declspec(dllexport) double Divide(double a, double b);
    };
}
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
// MyFirstDLL.cpp
// compile with: /EHsc /LD
 
#include "MyFirstDLL.h"
#include <stdexcept>
 
using namespace std;
 
namespace MyFirstDLL {
    double MyFirst::Add(double a, double b) {
        return a + b;
    }
 
    double MyFirst::Subtract(double a, double b) {
        return a - b;
    }
 
    double MyFirst::Multiply(double a, double b) {
        return a * b;
    }
 
    double MyFirst::Divide(double a, double b) {
        if (b != 0) {
            return a / b;
        }
        else {
            return 10001.1001;
        }
    }
}
Библиотека компилится без проблем, но когда я пытаюсь ее подключить к приложению, сделанному в CLR (не консольное), то у меня ничего не выходит... Собственно вопрос в том, как ее подключить, чтобы использовать функции из этой библиотеки? Буду благодарен за рабочий пример с исходным кодом

Заранее спасибо!

Сама библиотека вот:
Вложения
Тип файла: zip MyFirstDLL.zip (121.9 Кб, 104 просмотров)
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.08.2011, 15:51
Ответы с готовыми решениями:

Создание .dll и присоеденение .dll к проекту путем непосредственного написания кода
Здравствуйте, дорогие форумчане! Я прекрасно знаю, как создавать и прикреплять к проекту .dll файлы при помощи опций компилятора в Visual...

Как подключить dll на C# к проекту (dll) на С++
Подскажите, пожалуйста, как подключить dll на C# к проекту (dll) на С++. В интернете много примеров, где показаны примеры по подключению...

Проблема с подключением Dll
Добавляю соответствующий референс, пишу using MyDll; и получаю еррор: The type or namespace name 'MyDll' could not be found (are you...

31
Заблокирован
18.08.2011, 15:53  [ТС]
Да, проект делаю в Microsoft Visual Studio 2010
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
18.08.2011, 15:58
C++
1
2
3
4
5
6
7
8
9
10
11
12
///////////////////////////////////////////////////////////////////////
#ifdef __cplusplus
#define IMPORT extern "C" __declspec (dllimport) 
#else
#define IMPORT __declspec (dllimport)
#endif
 
#pragma comment(lib,"имя_либы_твоей_длл.lib")//либа с длл должна быть в папке проекта
IMPORT BOOL MyFun(void);     // функция импортируемая из DLL
 
//В программе вот так юзай 
MyFun(void);//как обычную функцию
Добавлено через 1 минуту
В длл вот так луше экспорт пропиши
C++
1
2
3
4
5
6
7
#ifdef __cplusplus 
#define EXPORT extern "C" __declspec (dllexport) 
#else 
#define EXPORT __declspec (dllexport) 
#endif 
 
EXPORT BOOL MyFun(void); // объявляем экспортируемую функцию
1
Заблокирован
18.08.2011, 16:03  [ТС]
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
///////////////////////////////////////////////////////////////////////
#ifdef __cplusplus
#define IMPORT extern "C" __declspec (dllimport) 
#else
#define IMPORT __declspec (dllimport)
#endif
 
#pragma comment(lib,"имя_либы_твоей_длл.lib")//либа с длл должна быть в папке проекта
IMPORT BOOL MyFun(void);     // функция импортируемая из DLL
 
//В программе вот так юзай 
MyFun(void);//как обычную функцию
Добавлено через 1 минуту
В длл вот так луше экспорт пропиши
C++
1
2
3
4
5
6
7
#ifdef __cplusplus 
#define EXPORT extern "C" __declspec (dllexport) 
#else 
#define EXPORT __declspec (dllexport) 
#endif 
 
EXPORT BOOL MyFun(void); // объявляем экспортируемую функцию
Спасибо, сейчас переделаю Dll и lib в каталоге программы должна быть? И где код писать в заголовочном файле или коде самой формы? Помогите, пожалуйста, а то в примерах MSDN про это очень кратко написано...
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
18.08.2011, 16:10
Ладно сейчас попробую по быстрому сделать тебе длл, объяснять дольше будет...

Добавлено через 3 минуты
Цитата Сообщение от GhostMan Посмотреть сообщение
Спасибо, сейчас переделаю Dll и lib в каталоге программы должна быть? И где код писать в заголовочном файле или коде самой формы? Помогите, пожалуйста, а то в примерах MSDN про это очень кратко написано...
- выложи исходник для создания длл, если ты при создании длл допустил ошибку конечным продуктом (длл), воспользоваться нелзя и подключить тоже врядли выйдет(
1
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
18.08.2011, 16:15
Посмотри пока эти два проекта
Вложения
Тип файла: rar hook.rar (23.6 Кб, 64 просмотров)
Тип файла: rar KeySpy.rar (31.6 Кб, 53 просмотров)
1
Заблокирован
18.08.2011, 16:17  [ТС]
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Ладно сейчас попробую по быстрому сделать тебе длл, объяснять дольше будет...

Добавлено через 3 минуты
- выложи исходник для создания длл, если ты при создании длл допустил ошибку конечным продуктом (длл), воспользоваться нелзя и подключить тоже врядли выйдет(
Да, конечно, вот уже переделанный:
Вложения
Тип файла: zip MyFirstDLL.zip (3.50 Мб, 40 просмотров)
0
Заблокирован
18.08.2011, 16:42  [ТС]
Попробовал собрать проект с dll, выдало ошибку:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
1>------ Построение начато: проект: test, Конфигурация: Debug Win32 ------
1>Построение начато 18.08.2011 16:41:23.
1>InitializeBuildStatus:
1>  Обращение к "Debug\test.unsuccessfulbuild".
1>GenerateTargetFrameworkMonikerAttribute:
1>Целевой объект "GenerateTargetFrameworkMonikerAttribute" пропускается, так как все выходные файлы актуальны по отношению к входным.
1>ClCompile:
1>  Для всех выходных данных обновления не требуется.
1>  test.cpp
1>c:\users\связной\documents\visual studio 2010\projects\test\test\Form1.h(90): error C3861: Add: идентификатор не найден
1>c:\users\связной\documents\visual studio 2010\projects\test\test\Form1.h(91): error C2227: выражение слева от "->ToString" должно указывать на тип класса, структуры или объединения либо на универсальный тип
1>          тип: double
1>
1>СБОЙ построения.
1>
1>Затраченное время: 00:00:00.23
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
Что не так сделал?
Вот исходник проекта вместе с dll:
Вложения
Тип файла: zip test.zip (997.2 Кб, 21 просмотров)
0
Заблокирован
18.08.2011, 16:48  [ТС]
Вот ещё новую ошибку получил:


C++
1
1>test.cpp(15): warning C4272: Add: помечается как __declspec(dllimport); при импорте функции необходимо указать собственное соглашение вызова.
Что это значит?
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
18.08.2011, 16:55
extern "C" из макроса удали.

Добавлено через 1 минуту
Или явно __thiscall допиши
1
Заблокирован
18.08.2011, 16:57  [ТС]
Цитата Сообщение от Deviaphan Посмотреть сообщение
extern "C" из макроса удали.

Добавлено через 1 минуту
Или явно __thiscall допиши
А подробней можно, а то все равно ошибку выдало
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
18.08.2011, 17:06
Я тебе ерунду сказал, т.к. код не смотрел.
По поводу ToString. Это С++, а не C#.
По поводу Add. Библиотека не подключена, функция не импортирована и чего ты хотел тогда.)

Добавлено через 1 минуту
А т.к. CLI я считаю извращением вселенского масштаба, то и подсказать не смогу. Это тебе в раздел C++/CLI
1
Заблокирован
18.08.2011, 17:10  [ТС]
Цитата Сообщение от Deviaphan Посмотреть сообщение
Я тебе ерунду сказал, т.к. код не смотрел.
По поводу ToString. Это С++, а не C#.
По поводу Add. Библиотека не подключена, функция не импортирована и чего ты хотел тогда.)

Добавлено через 1 минуту
А т.к. CLI я считаю извращением вселенского масштаба, то и подсказать не смогу. Это тебе в раздел C++/CLI
Я ее как раз и хочу подключить
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
18.08.2011, 17:12
На С++ нужно добавить .lib файл к проекту и хэдэр с именами импортируемых функций. Как это будет на CLI я не знаю.
Более того, ты создал библиотеку не на Си, а на С++, что так же может привести к проблемам (а может и не привести, т.к. я CLI не знаю).
Может и библиотеку управляемую собрать стоит?
1
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
18.08.2011, 17:16
Лучший ответ Сообщение было отмечено как решение

Решение

Вот проект твоей длл и консольного юзера этой же длл
Миниатюры
Помогите с подключением dll к проекту  
Вложения
Тип файла: rar MyFirstDLL.rar (8.3 Кб, 507 просмотров)
Тип файла: rar MyUseFirstDLL.rar (22.5 Кб, 459 просмотров)
5
Заблокирован
18.08.2011, 17:17  [ТС]
Цитата Сообщение от Deviaphan Посмотреть сообщение
На С++ нужно добавить .lib файл к проекту и хэдэр с именами импортируемых функций. Как это будет на CLI я не знаю.
Более того, ты создал библиотеку не на Си, а на С++, что так же может привести к проблемам (а может и не привести, т.к. я CLI не знаю).
Может и библиотеку управляемую собрать стоит?
CLR - это же, вроде, и есть C++? Или я что-то путаю?
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
18.08.2011, 17:18
Цитата Сообщение от GhostMan Посмотреть сообщение
Или я что-то путаю?
Это управляемый С++. Лучше C# изучить, чем на таком извращении писать.)
1
Заблокирован
18.08.2011, 17:23  [ТС]
Цитата Сообщение от Deviaphan Посмотреть сообщение
Это управляемый С++. Лучше C# изучить, чем на таком извращении писать.)
Я делаю проект на C++ и сделал уже довольно много (то что выкладываю к проекту никак не относится, это просто для примера использования длл), сейчас хочу выгрузить некоторые части программы в отдельные dll, поэтому на C# уже не хочется все переделывать
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
18.08.2011, 17:25
GhostMan, кому я пректы написал????
Код твоей длл
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
36
37
38
39
40
41
42
#include "stdafx.h"
 
#ifdef __cplusplus 
#define EXPORT extern "C" __declspec (dllexport) 
#else 
#define EXPORT __declspec (dllexport) 
#endif 
 
EXPORT double Add(double a, double b);
EXPORT double Subtract(double a, double b); 
EXPORT double Multiply(double a, double b); 
EXPORT double Divide(double a, double b);
 
BOOL APIENTRY DllMain( HANDLE hModule, 
                       DWORD  ul_reason_for_call, 
                       LPVOID lpReserved
                     )
{
    return TRUE;
}
 
EXPORT double Add(double a, double b) 
{
    return a + b;
}
EXPORT double Subtract(double a, double b) 
{
    return a - b;
}
 
EXPORT double Multiply(double a, double b) 
{
    return a * b;
}
 
EXPORT double Divide(double a, double b) 
{
    double ret = 10001.1001;
    if (b != 0) 
        ret = a/b;
    return ret;
}
3
Заблокирован
18.08.2011, 17:33  [ТС]
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Вот проект твоей длл и консольного юзера этой же длл
Спасибо большое за примеры! В консоли все работает отлично, но где ошибка здесь :
Вложения
Тип файла: zip test.zip (1,005.8 Кб, 118 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.08.2011, 17:33
Помогаю со студенческими работами здесь

Проблема с подключением mshtml.dll
Если попытаться подключить Microsoft HTML Object Library, находящуюся в mshtml.dll, выдается сообщение '..mshtml.dll could not be loaded'. ...

Подключение dll к проекту Qt
Добрый день. В Qt недавно. Возникла проблема с подключением библиотеки lapack https://icl.cs.utk.edu/lapack-for-windows/lapack/ . Из...

Подключение DLL к проекту
Добрый день. Решил написать DLL и подключить его к консольному приложению C++. DLL библиотека имеет следующий вид, написал с...

Подключение dll к проекту на c#
Столкнулся с такой проблемой, при вызове функций описанных в dll, выскакивает такая ошибка An unhandled exception of type...

Подключение dll к проекту
Доброго времени суток форумчане! Столкнулся с задачей подлючения системной dll-ки к проекту и использования ее функций(inetmib1.dll). ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
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 и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru