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

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

18.08.2011, 15:51. Показов 16734. Ответов 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
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
18.08.2011, 17:36
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от GhostMan Посмотреть сообщение
Вот ещё новую ошибку получил:
Хорошо вместо этого
C++
1
2
3
4
5
#ifdef __cplusplus 
#define EXPORT extern "C" __declspec (dllexport) 
#else 
#define EXPORT __declspec (dllexport) 
#endif
Вбей
C++
1
#define EXPORT __declspec (dllexport)
аналогично вместо
C++
1
2
3
4
5
#ifdef __cplusplus
#define IMPORT extern "C" __declspec (dllimport) 
#else
#define IMPORT __declspec (dllimport)
#endif
вбей
C++
1
#define IMPORT __declspec (dllimport)
Компилятор и сейчас ругается???
Я в 6-й версии написал, но код там считай простая консоль, работает тоже норм

Добавлено через 2 минуты
Сейчас посмотрю...
1
Заблокирован
18.08.2011, 17:43  [ТС]
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
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;
}
Спасибо, я уже исправил, но она работает только в консоли, а в CLR я ее по-прежнему не могу подключить:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
1>------ Построение начато: проект: test, Конфигурация: Debug Win32 ------
1>Построение начато 18.08.2011 17:38:49.
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>test.cpp(16): warning C4272: Add: помечается как __declspec(dllimport); при импорте функции необходимо указать собственное соглашение вызова.
1>test.cpp(17): warning C4272: Subtract: помечается как __declspec(dllimport); при импорте функции необходимо указать собственное соглашение вызова.
1>test.cpp(18): warning C4272: Multiply: помечается как __declspec(dllimport); при импорте функции необходимо указать собственное соглашение вызова.
1>test.cpp(19): warning C4272: Divide: помечается как __declspec(dllimport); при импорте функции необходимо указать собственное соглашение вызова.
1>test.cpp(19): error C2059: синтаксическая ошибка: )
1>
1>СБОЙ построения.
1>
1>Затраченное время: 00:00:00.27
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
Добавлено через 4 минуты
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Хорошо вместо этого
C++
1
2
3
4
5
#ifdef __cplusplus 
#define EXPORT extern "C" __declspec (dllexport) 
#else 
#define EXPORT __declspec (dllexport) 
#endif
Вбей
C++
1
#define EXPORT __declspec (dllexport)
аналогично вместо
C++
1
2
3
4
5
#ifdef __cplusplus
#define IMPORT extern "C" __declspec (dllimport) 
#else
#define IMPORT __declspec (dllimport)
#endif
вбей
C++
1
#define IMPORT __declspec (dllimport)
Компилятор и сейчас ругается???
Я в 6-й версии написал, но код там считай простая консоль, работает тоже норм

Добавлено через 2 минуты
Сейчас посмотрю...

На код:
C++
1
2
3
4
5
6
7
8
9
#define IMPORT __declspec (dllimport)
 
 
#pragma comment(lib,"MyFirstDLL.lib") 
 
IMPORT double Add(double a, double b);
IMPORT double Subtract(double a, double b);
IMPORT double Multiply(double a, double b);
IMPORT double Divide(double a, double b);
Выдает ту же самую ошибку

Блин, когда на Дельфине делали все в сто раз проще было... а с С++...
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
18.08.2011, 17:46
Быстрый анализ либы показал что твои функции либо без прототипов либо не объявлены к экспорту
вот строка из твоей либы
__NULL_IMPORT_DESCRIPTOR MyFirstDLL_NULL_THUNK_DATA ?Add@MyFirst@MyFirstDLL@@SANNN@Z __imp_?Add@MyFirst@MyFirstDLL@@SANNN@Z и т.д
Вот код из моей рабочей DLL где есть экспорт
V__IMPORT_DESCRIPTOR_MyFirstDLL MyFirstDLL_NULL_THUNK_DATA _Add __imp__Add
Твой код проанализирую чуть позже как сяду в 2008-й студии, т.к. 2010-ую 6-й версией не открыть(
1
Заблокирован
18.08.2011, 17:47  [ТС]
Если можно, сделайте, пожалуйста, тестовый пример в CLR (т.е. чтобы была форма и в textBox выводились значения), может до меня хоть так дойдет, что я неправильно делаю
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
18.08.2011, 17:47
Цитата Сообщение от GhostMan Посмотреть сообщение
а с С++..
Это не С++, это CLI. Не наговаривай понапрасну.

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Я в 6-й версии написал
В 6 студии был ДотНэт?О_о
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
18.08.2011, 17:48
Цитата Сообщение от GhostMan Посмотреть сообщение
Спасибо, я уже исправил, но она работает только в консоли, а в CLR
- хорошо чуть позже скомпилю в 2008, так сказать не могу почему 10-ка бредит
1
Заблокирован
18.08.2011, 17:50  [ТС]
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Быстрый анализ либы показал что твои функции либо без прототипов либо не объявлены к экспорту
вот строка из твоей либы
__NULL_IMPORT_DESCRIPTOR MyFirstDLL_NULL_THUNK_DATA ?Add@MyFirst@MyFirstDLL@@SANNN@Z __imp_?Add@MyFirst@MyFirstDLL@@SANNN@Z и т.д
Вот код из моей рабочей DLL где есть экспорт
V__IMPORT_DESCRIPTOR_MyFirstDLL MyFirstDLL_NULL_THUNK_DATA _Add __imp__Add
Твой код проанализирую чуть позже как сяду в 2008-й студии, т.к. 2010-ую 6-й версией не открыть(
Я уже и Вашу пытался подключать - результат тот же
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
18.08.2011, 17:56
Цитата Сообщение от Deviaphan Посмотреть сообщение
Это не С++, это CLI. Не наговаривай понапрасну.


В 6 студии был ДотНэт?О_о
- нет не было, а причём тут фреймвёк?

Добавлено через 4 минуты
Как я сразу не вкурил - не работает потому что в CLR синтаксис отличается, сознаюсь в CLR не работал
http://en.wikipedia.org/wiki/C%2B%2B/CLI
C++/CLI (Common Language Infrastructure) is Microsoft's language specification intended to supersede Managed Extensions for C++. It is a complete revision that aims to simplify the older Managed C++ syntax (that is now deprecated). C++/CLI is standardized by Ecma as ECMA-372. It is currently available only in Visual Studio 2005, 2008 and 2010 (also included in the Express Editions).
1
Заблокирован
18.08.2011, 17:56  [ТС]
Цитата Сообщение от Deviaphan Посмотреть сообщение
Это не С++, это CLI. Не наговаривай понапрасну.


В 6 студии был ДотНэт?О_о
Что-то я совсем запутался: почему не C++, я проект создаю: Проект -> Visual C++ -> CLR -> Windows Form
Да, и синтаксис языка, как у С++
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
18.08.2011, 18:03
Цитата Сообщение от GhostMan Посмотреть сообщение
Что-то я совсем запутался
Есть С++, а есть мега-изврат С++/CLI. CLR это управляемый С++, который был создан по прихоти группы извращенцев... Не буду холиварить лучше, пока не забанили.)
2
Заблокирован
18.08.2011, 18:07  [ТС]
Все же, если сможете, выложите, пожалуйста, проект с такой библиотекой, только CLR с формой, а то я уже 9-ый день с этой фигнеё бьюсь, не могу рабочий пример найти

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

Добавлено через 2 минуты
Цитата Сообщение от Deviaphan Посмотреть сообщение
Есть С++, а есть мега-изврат С++/CLI. CLR это управляемый С++, который был создан по прихоти группы извращенцев... Не буду холиварить лучше, пока не забанили.)
Спасибо, что пояснили Хоть немного понял, в чем разница
0
18.08.2011, 19:50

Не по теме:

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
т.к. 2010-ую 6-й версией не открыть
А так же 2008, 2005... Всем, что раньше.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.08.2011, 19:50

Проблема с подключением 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). ...


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

Или воспользуйтесь поиском по форуму:
32
Ответ Создать тему
Новые блоги и статьи
GitHub Copilot в JetBrains: модель по умолчанию, Fix и контроль MCP
and_y87 12.10.2026
10 октября 2026 года GitHub обновил Copilot для JetBrains: добавил настройки стартовой модели, исправления из диагностики и управление автозапуском MCP. Поддержка IDE 2025. 1 прекращена — требуется. . .
День 5 из 28: Codex подсказывает следующий запрос
and_y87 12.10.2026
9 октября 2026 года OpenAI запустила бету Composer predictions — подсказок следующего сообщения в текущем диалоге Codex. Это помощь с формулировкой запроса, а не автоматическое продолжение задачи. . . .
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru