Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.87/47: Рейтинг темы: голосов - 47, средняя оценка - 4.87
2 / 2 / 2
Регистрация: 27.02.2016
Сообщений: 247

Подключение dll к проекту на Visual Studio

28.01.2017, 19:16. Показов 8862. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет.
Я в этом деле новичок еще не приходилось собирать с нуля проекты с .dll в visual studio 2012 поэтому смутно понимаю с чего нужно начать.
В общем я хочу подключить внешней кит модуль для работы с микроспектрометром hamamatsu. Для этого у меня есть кит, микроспектрометор, все провода и лампа с широким спектром. Также hamamatsu дали описания функции dll, но как подключить dll собрать проект мне не понятно.
Вложения
Тип файла: pdf DLL for minispectrometer (K29-B60755C)DLLFuncSpec.pdf (120.4 Кб, 21 просмотров)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.01.2017, 19:16
Ответы с готовыми решениями:

Подключение dll к проекту в visual studio
Доброго дня, тема уже эта конечно избитая на форуме, но так и не смог найти решения под свою конкретную задачу, прочитав все, что...

Подключение MYSQL к проекту Visual Studio C++
Здравствуйте, как подключить базу данных MYSQL, phpMyAdmin к проекту (CLR/Windows Forms C++)?

Visual Studio 2010 подключение DLL(C++) к проекту на C#
Добрый день! По манулу создал DLL. Так же создал приложение на C#. Хочется использовать функции из ранее созданной библиотеки. Каким...

21
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
28.01.2017, 21:49
Перепилите под свои функции сами.
C++
1
2
3
4
5
6
7
8
9
10
11
#include<Windows.h>
 
typedef int (WINAPI*MessageBoxPointer)(HWND, LPCSTR, LPCSTR, UINT);
int main()
{
    HMODULE module = LoadLibraryA("user32.dll");
    MessageBoxPointer messageBoxPointer = (MessageBoxPointer)GetProcAddress(module, "MessageBoxA");
    messageBoxPointer(NULL, "Test", "Test", MB_OK);
    FreeLibrary(module);
    return 0;
}
PS Если вам нужна была статическая линковка, то хз как это в Студии делается.
1
3176 / 1935 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
28.01.2017, 23:18
Exporting from a DLL Using DEF Files
Working with Import Libraries and Export Files
0
2 / 2 / 2
Регистрация: 27.02.2016
Сообщений: 247
29.01.2017, 12:03  [ТС]
Указал вопросы прямо в коде.

C++
1
2
3
4
5
6
7
8
9
10
11
#include<Windows.h>
 
typedef int (WINAPI*MessageBoxPointer)(HWND, LPCSTR, LPCSTR, UINT); // HWND, LPCSTR, LPCSTR, UINT Это переменные ? 
int main()
{
    HMODULE module = LoadLibraryA("user32.dll"); // Каким образом находит программа user32.dll? Вы же не указываете путь до .dll.
    MessageBoxPointer messageBoxPointer = (MessageBoxPointer)GetProcAddress(module, "MessageBoxA"); // получаю адрес функции MessageBoxA  в user32.dll? 
    messageBoxPointer(NULL, "Test", "Test", MB_OK); //  передали в функцию параметры 
    FreeLibrary(module); // выгрузить из памяти user32.dll
    return 0;
}
Написал свой код, но программа выдает ошибку
Необработанное исключение по адресу 0x00000000 в Win32Project1.exe: 0xC0000005: нарушение прав доступа при исполнении по адресу 0x00000000.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include<Windows.h>
 
typedef int (WINAPI*MessageBoxPointer)(); // без переменных 
int main()
{
    HMODULE module = LoadLibraryA("HMSUSB2.dll"); // загружаю HMSUSB2.dll
    MessageBoxPointer messageBoxPointer = (MessageBoxPointer)GetProcAddress(module, "HMS_initialize"); // получаю адрес функции 
    long a = messageBoxPointer(); // функция должна вернуть код ошибки 
 
    FreeLibrary(module); // 
 
    return 0;
}
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
29.01.2017, 15:21
Цитата Сообщение от Alex_Golubev Посмотреть сообщение
Необработанное исключение по адресу 0x00000000 в Win32Project1.exe: 0xC0000005: нарушение прав доступа при исполнении по адресу 0x00000000
Я так подозреваю, система dll-ку не нашла. Добавьте что-то в духе:
C++
1
2
3
4
if(!module)
    cout<<"Can't load dll!"<<endl;
if(!messageBoxPointer)
    cout<<"Can't find function in dll!"<<endl;
Цитата Сообщение от Alex_Golubev Посмотреть сообщение
HWND, LPCSTR, LPCSTR, UINT Это переменные ?
Это список аргументов целевой функции. Должно совпадать с тем, что у вас в документации написано.
Цитата Сообщение от Alex_Golubev Посмотреть сообщение
Каким образом находит программа user32.dll? Вы же не указываете путь до .dll.
У системы есть набор путей по умолчанию. Попробуйте либо положить dll в тот же каталог что и exe-файл, либо вбить в программу полный путь к dll.
Цитата Сообщение от Alex_Golubev Посмотреть сообщение
получаю адрес функции MessageBoxA в user32.dll?
Именно.
1
3176 / 1935 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
29.01.2017, 16:05
Цитата Сообщение от Alex_Golubev Посмотреть сообщение
Указал вопросы прямо в коде.

Не по теме:

Месье знает толк в извращениях. ©


Простейшая, описанная в MSDN статическая линковка чем-то не устраивает?

По шагам (с какого-то форума):
Миниатюры
Подключение dll к проекту на Visual Studio  
0
2 / 2 / 2
Регистрация: 27.02.2016
Сообщений: 247
29.01.2017, 19:11  [ТС]
Сделал вот так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include<Windows.h>
#include <stdio.h>
typedef int (WINAPI*MessageBoxPointer)(void); // без переменых 
int main()
{
    HMODULE module = LoadLibraryA("HMSUSB2.dll"); // загружаю HMSUSB2.dll
    if (!module){
        printf("Can't load dll!\n");
    }
    MessageBoxPointer messageBoxPointer = (MessageBoxPointer)GetProcAddress(module, "HMS_uninitialize"); // получаю адрес функции 
    if (!messageBoxPointer){
        printf("Can't find function in dll\n");
    }
//    long a = messageBoxPointer(); // функция должна вернуть код ошибки 
 
    FreeLibrary(module); // 
    system("pause");
    return 0;
}
Программа выдает Can't find function in dll. Название функции взял из документации. Как можно посмотреть какие есть функции в .dll ?
Миниатюры
Подключение dll к проекту на Visual Studio  
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
29.01.2017, 19:46
Цитата Сообщение от Alex_Golubev Посмотреть сообщение
Как можно посмотреть какие есть функции в .dll ?
В недрах студии должна быть утилита dumpbin. Win+R, в появившемся окне набираете cmd, жмете enter. Открывается консоль, туда вводите команду вида "C:\Program Files\Microsoft Visual Studio 14.0\VC\bin\dumpbin.exe" /exports путь_к_dll. Путь к dumpbin.exe в вашей студии может отличаться.
0
1 / 1 / 0
Регистрация: 20.06.2014
Сообщений: 47
29.01.2017, 20:49
Зачем вы используете LoadLibraryA это ANSI

Добавлено через 56 секунд
LoadLibraryW или LoadLibrary
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
29.01.2017, 20:52
Цитата Сообщение от EugeneQ Посмотреть сообщение
Зачем вы используете LoadLibraryA это ANSI
1) Короче - не нужно TEXT("user32.dll") или L"user32.dll".
2) До сих пор не удалось поймать того извращенца, который делает dll с не ANSI именами.
3) У GetProcAddress один фиг нет юникодной версии, так что никуда вы от ANSI не денетесь.
0
2 / 2 / 2
Регистрация: 27.02.2016
Сообщений: 247
29.01.2017, 20:55  [ТС]
Вот сделал export и не понял а где функции?
Миниатюры
Подключение dll к проекту на Visual Studio  
0
1 / 1 / 0
Регистрация: 20.06.2014
Сообщений: 47
29.01.2017, 20:56
У него в настройках проекта может выставлен UNICODE
Достаточно макроса LoadLibrary("name").
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
29.01.2017, 21:07
Цитата Сообщение от Alex_Golubev Посмотреть сообщение
Вот сделал export и не понял а где функции?
Тоже самое для C:\Windows\System32\user32.dll список функций показывает? Если на user32.dll работает (у себя проверял - работает), а на вашей dll не работает, то идеи у меня кончились.

Добавлено через 3 минуты
Цитата Сообщение от EugeneQ Посмотреть сообщение
Достаточно макроса LoadLibrary("name").
error C2664: 'HMODULE LoadLibraryW(LPCWSTR)': cannot convert argument 1 from 'const char [5]' to 'LPCWSTR'
Без TEXT или L работать как раз таки не будет.
0
1 / 1 / 0
Регистрация: 20.06.2014
Сообщений: 47
29.01.2017, 21:16
Я говорю не про LoadLibraryW, а про макрос LoadLibrary.

Добавлено через 1 минуту
В Visual Studio он находится в WinBase.h
0
2 / 2 / 2
Регистрация: 27.02.2016
Сообщений: 247
29.01.2017, 21:16  [ТС]
Выдал список функций для C:\Windows\System32\user32.dll. Это получается нет функций в HMSUSB2.dll ? А как же присланный документ с функциями
Миниатюры
Подключение dll к проекту на Visual Studio  
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
29.01.2017, 21:28
Цитата Сообщение от EugeneQ Посмотреть сообщение
Я говорю не про LoadLibraryW, а про макрос LoadLibrary.
А я говорю попробовать свой код скомпилировать для юникода, а не фантазировать.
"Макрос LoadLibrary", это LoadLibraryW и есть.
C++
1
2
3
4
5
#ifdef UNICODE
#define LoadLibrary  LoadLibraryW
#else
#define LoadLibrary  LoadLibraryA
#endif // !UNICODE
Добавлено через 3 минуты
Цитата Сообщение от Alex_Golubev Посмотреть сообщение
Выдал список функций для C:\Windows\System32\user32.dll. Это получается нет функций в HMSUSB2.dll ? А как же присланный документ с функциями
Получается, там нет таблицы экспорта говорящей где эти функции лежат. Или есть, но в непонятном dumpbin (и системе) формате. И тут уже хз как тогда эти функции предполагается вытрясти. Ибо даже статическая линковка вроде как держится на той же таблице экспорта.

Добавлено через 6 минут
UPD Хм... Погуглил, посмотрел в доку, "HMSUSB2.dll (Functions are unavailable to users)". Интересный у вас там поставщик программного обеспечения.
0
1 / 1 / 0
Регистрация: 20.06.2014
Сообщений: 47
29.01.2017, 21:46
wchar использовать запрещено?

Добавлено через 17 минут
Библиотека в стиле "C"?
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
29.01.2017, 21:48
Цитата Сообщение от EugeneQ Посмотреть сообщение
wchar использовать запрещено?
Чтобы получить wchar_t литерал, надо писать L перед кавычками. Чтобы тип литерала менялся в зависимости от настроек проекта, надо заключать его в TEXT(). А по умолчанию строковые литералы идут в ANSI и никакими настройками проекта это не поменяешь.
0
2 / 2 / 2
Регистрация: 27.02.2016
Сообщений: 247
30.01.2017, 05:29  [ТС]
UPD посмотрел в доку, "HMSUSB2.dll (Functions are unavailable to users)". Интересный у вас там поставщик программного обеспечения.
Получается, что нельзя работать с данной .dll? Просить чтобы выслали .dll с открытыми для пользователя функциями
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
30.01.2017, 05:30
Цитата Сообщение от Alex_Golubev Посмотреть сообщение
Получается, что нельзя работать с данной .dll? Просить чтобы выслали .dll с открытыми для пользователя функциями
Ну, видимо, да - писать что так мол и так, экспортируемых функций обнаружить не удалось (листинг dumpbin прилагается), по документации их и не должно быть. Дайте другую библиотеку.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.01.2017, 05:30
Помогаю со студенческими работами здесь

Подключение OpenGL к проекту на С++ (Visual Studio)
Доброго времени суток! Никак не могу понять, как подключать библиотеку OpenGL к своему проекту. h-файлы подключаются без проблем, но у меня...

Как в visual studio 2017 подключить dll библиотеку к проекту?
Как в visual studio 2017 подключить dll библиотеку к проекту? Явным и неясным способом. В одном случае у меня есть только файл .dll, во...

Подключение папки с исходниками к проекту Visual Studio 2015
Здравствуйте, Имеется папка с вложенные каталоги с файлами .cpp и .h. Возник вопрос как подключить данную папочку к проекту Visual...

Подключение библиотеки dlib к проекту, visual studio 2015
кто-нибудь подключал библиотеку dlib к проекту в visual studio 2015? нужна помощь, я только прописываю пути как на скрине, но думаю что...

Подключение .dll в Visual Studio 2010
Не могу справиться со студией. Не могли бы Вы подробно, пошагово написать когда и как подключить библиотеку данных к программе. Пробовал,...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru