Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.93
Bvdvv
3 / 3 / 0
Регистрация: 13.11.2014
Сообщений: 29
#1

Как подключить DLL - C++

13.11.2014, 16:00. Просмотров 3562. Ответов 29
Метки нет (Все метки)

Доброе время суток уважаемые участники


Пытаюсь написать программу по работе с усб мостом, столкнулся с программной проблемой Скачал длл, хедеры, библиотеку, всё что рекомендует производитель, но что с этим делать не совсем понимаю. В с++ новичок, си знаю чуть ниже среднего уровня. http://www.silabs.com/support%20documents/technicaldocs/AN434.pdf

Создал простую программу в CodeBlocks
C++
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
#include <SLABCP2110.h>
#include <SLABHIDtoUART.h>
 
void HidUart_GetNumDevices();
 
int main(void)
{
    HidUart_GetNumDevices();
}
получаю ошибки
Код
C:\c_workspace\CBusart6\SLABHIDtoUART.h|218|error: expected initializer before 'HidUart_GetNumDevices'

C:\c_workspace\CBusart6\SLABHIDtoUART.h|222|error: expected initializer before 'HidUart_GetString'|

... и т.д.
ругается на SLABHIDtoUART.h. Добавлял и библиотеку и хедеры в проект, не работает и всё.

По советуйте что нибуть пожалуйста.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.11.2014, 16:00
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Как подключить DLL (C++):

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

Как подключить в С++ dll-ку из C#?
Создал в Visual Studio dll-ку на C#. Хочу подключить ее в С++, не выходит. ...

Как подключить dll к проекту?
Ребят помогите пожалуйста, если сможете а то я уже 3 дня долбаюсь чет никак не...

Как подключить пользовательскую DLL к приложению
Добрый вечер! Я первый раз пишу dll. Вот ее текст: My.cpp: #include&lt;iostream&gt;...

как подключить dll и lib SDL
как подключить к проекту(в Visual Studio 2010) библиотеку SDL?// есть SDL.dll,...

Как подключить библиотеку i7000.dll?
у меня есть библиотека i7000.dll библиотека необходимая для работы с com...

29
aLarman
644 / 565 / 164
Регистрация: 13.12.2012
Сообщений: 2,112
Завершенные тесты: 1
13.11.2014, 16:05 #2
Добавлял и библиотеку и хедеры в проект, не работает и всё.
не так добавляете видимо, там где main.cpp находится туда киньте и заголовки и .lib файл
или пропишите к ним пути в настройках проекта
а .dll туда где хранится скомпилированный .exe
0
Bvdvv
3 / 3 / 0
Регистрация: 13.11.2014
Сообщений: 29
13.11.2014, 16:11  [ТС] #3
всё закинул в папку с проектом, пытался уже и в Qt и в VS2010 делать всё одно и то же
0
aLarman
13.11.2014, 16:32
  #4

Не по теме:

вроде как пишут что разработку надо вести в ней "Simplicity Studio" может в этом причина?)

0
ValeryS
Модератор
7130 / 5398 / 669
Регистрация: 14.02.2011
Сообщений: 18,218
13.11.2014, 16:37 #5
Цитата Сообщение от Bvdvv Посмотреть сообщение
всё закинул в папку с проектом, пытался уже и в Qt и в VS2010 делать всё одно и то же
а к проекту то подключил?
он тебе говорит что не знает где реализованы файлы 'HidUart_GetNumDevices' и прочие
значит или не подключена библиотека lib и линкер не знает ничего
или исходные файлы, тогда компилятор не компилит
0
Bvdvv
3 / 3 / 0
Регистрация: 13.11.2014
Сообщений: 29
13.11.2014, 16:42  [ТС] #6
Цитата Сообщение от aLarman Посмотреть сообщение

Не по теме:

вроде как пишут что разработку надо вести в ней "Simplicity Studio" может в этом причина?)

Хм, в примерах которые я скачал , есть проект для Visual Studio но он не компилится тоже

Добавлено через 1 минуту
Цитата Сообщение от ValeryS Посмотреть сообщение
а к проекту то подключил?
он тебе говорит что не знает где реализованы файлы 'HidUart_GetNumDevices' и прочие
значит или не подключена библиотека lib и линкер не знает ничего
или исходные файлы, тогда компилятор не компилит
Библиотеку подключил конечно, проблема в том что я уже пробовал так всё собирать ,, вроде бы со всеми подключениями в трёх средах, Qt, CodeBlocks и VS2010 и везде одна ошибка.
0
aLarman
644 / 565 / 164
Регистрация: 13.12.2012
Сообщений: 2,112
Завершенные тесты: 1
13.11.2014, 16:44 #7
Цитата Сообщение от Bvdvv Посмотреть сообщение
void HidUart_GetNumDevices();
быть может вот эту строку не надо? она же уже объявлена в каком то хедере
0
Kuzia domovenok
2210 / 1979 / 442
Регистрация: 25.03.2012
Сообщений: 6,947
Записей в блоге: 1
13.11.2014, 16:50 #8
Bvdvv,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
HMODULE MyLib=NULL;
typedef void (*Func_HidUart_GetNumDevices)();
Func_HidUart_GetNumDevices HidUart_GetNumDevices=NULL;
int main(){
  MyLib=LoadLibrary("abracadabra.dll");
    if (!MLib){
        OutputDebugString("library abracadabra.dll not found");
        return 1;
    }
  HidUart_GetNumDevices=(Func_HidUart_GetNumDevices)GetProcAddress(MLib, "GetNumDevices");
  if (!HidUart_GetNumDevices){
        OutputDebugString("GetNumDevices not found at abracadabra.dll ");
        return 1;
  }
  //теперь можно работать
  HidUart_GetNumDevices();
 
  //если сильно память экономишь, потом можно выгрузить либу.
  FreeLibrary(MyLib);
  return 0;
}
1
Bvdvv
3 / 3 / 0
Регистрация: 13.11.2014
Сообщений: 29
13.11.2014, 19:06  [ТС] #9
Цитата Сообщение от aLarman Посмотреть сообщение
быть может вот эту строку не надо? она же уже объявлена в каком то хедере
без ней тоже самое

Добавлено через 30 секунд
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Bvdvv,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
HMODULE MyLib=NULL;
typedef void (*Func_HidUart_GetNumDevices)();
Func_HidUart_GetNumDevices HidUart_GetNumDevices=NULL;
int main(){
  MyLib=LoadLibrary("abracadabra.dll");
    if (!MLib){
        OutputDebugString("library abracadabra.dll not found");
        return 1;
    }
  HidUart_GetNumDevices=(Func_HidUart_GetNumDevices)GetProcAddress(MLib, "GetNumDevices");
  if (!HidUart_GetNumDevices){
        OutputDebugString("GetNumDevices not found at abracadabra.dll ");
        return 1;
  }
  //теперь можно работать
  HidUart_GetNumDevices();
 
  //если сильно память экономишь, потом можно выгрузить либу.
  FreeLibrary(MyLib);
  return 0;
}
извините не знаю как это применить


В Qt если библиотеку выбирать как внешнюю со статистической компоновкой то выдаёт только такую ошибку

Код
No rule to make target 'C:/Qt/works/usart16/libSLABHIDtoUART.a', needed by 'debug\usart16.exe'.  Stop.
0
ValeryS
Модератор
7130 / 5398 / 669
Регистрация: 14.02.2011
Сообщений: 18,218
13.11.2014, 19:57 #10
Цитата Сообщение от Bvdvv Посмотреть сообщение
В Qt если библиотеку выбирать как внешнюю со статистической компоновкой
А библиотека точно lib???
только её можно статически прилинковать
по ссылкам я нашел только описание на dll
а dllку подключить, не скомпоновать, а именно подключить, можно только во время исполнения программы
как показал Kuzia domovenok,
Цитата Сообщение от Bvdvv Посмотреть сообщение
извините не знаю как это применить
читай что такое "динамическое подключение"
когда нужна тебе библиотека подключаешь
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
MyLib=LoadLibrary("abracadabra.dll");
обычно в функции main (WinMain), когда не нужна отключаешь
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
FreeLibrary(MyLib);
0
Bvdvv
3 / 3 / 0
Регистрация: 13.11.2014
Сообщений: 29
13.11.2014, 20:33  [ТС] #11
Цитата Сообщение от ValeryS Посмотреть сообщение
А библиотека точно lib???
только её можно статически прилинковать
по ссылкам я нашел только описание на dll
а dllку подключить, не скомпоновать, а именно подключить, можно только во время исполнения программы
как показал Kuzia domovenok,

читай что такое "динамическое подключение"
когда нужна тебе библиотека подключаешь
обычно в функции main (WinMain), когда не нужна отключаешь
извините, не тот апноут указал , вот это то что нужно https://www.silabs.com/Support%20Documents/TechnicalDocs/AN433.pdf


да , точно lib , файл SLABHIDtoUART.lib

Так я так понял что если я хедеры включить в файл то могу функции от туда брать? Или я вообще ничего не понимаю? А хедеры уже сами ддлки подключат или SLABHIDtoUART.lib дллки подключит или нет?
0
ValeryS
Модератор
7130 / 5398 / 669
Регистрация: 14.02.2011
Сообщений: 18,218
13.11.2014, 20:39 #12
Цитата Сообщение от Bvdvv Посмотреть сообщение
Так я так понял что если я хедеры включить в файл то могу функции от туда брать?
нет
там только описание а реализация в lib
Цитата Сообщение от Bvdvv Посмотреть сообщение
А хедеры уже сами ддлки подключат или SLABHIDtoUART.lib дллки подключит или нет?
ты путаешь статическую линковку, это когда код из библиотеки встраивается в твою программу
и динамическое подключение, когда во время выполнения программы в память подгружается ДЛЛка и взаимодействует с программой
0
Bvdvv
3 / 3 / 0
Регистрация: 13.11.2014
Сообщений: 29
13.11.2014, 20:47  [ТС] #13
Цитата Сообщение от ValeryS Посмотреть сообщение
нет
там только описание а реализация в lib

ты путаешь статическую линковку, это когда код из библиотеки встраивается в твою программу
и динамическое подключение, когда во время выполнения программы в память подгружается ДЛЛка и взаимодействует с программой
как мне функциями из хидеров пользоваться, объясните пожалуйста, какое мне линкование нужно? я так понял из апноута 433 и 434 что мне нужно динамическое, тогда надо включить хедеры в код ?
0
ValeryS
Модератор
7130 / 5398 / 669
Регистрация: 14.02.2011
Сообщений: 18,218
13.11.2014, 20:51 #14
Цитата Сообщение от Bvdvv Посмотреть сообщение
тогда надо включить хедеры в код ?
в любом случае надо, там описание функций, констант....
а динамическое подключение показал Kuzia domovenok,
для статической линковки lib нужно поключить к проекту, чтобы линкер смог вставить код
а у каждого компилятора, правильней сказать среды,это делается по своему
0
Bvdvv
3 / 3 / 0
Регистрация: 13.11.2014
Сообщений: 29
14.11.2014, 09:45  [ТС] #15
Цитата Сообщение от ValeryS Посмотреть сообщение
в любом случае надо, там описание функций, констант....
а динамическое подключение показал Kuzia domovenok,
для статической линковки lib нужно поключить к проекту, чтобы линкер смог вставить код
а у каждого компилятора, правильней сказать среды,это делается по своему
всё равно не совсем понимаю что нужно сделать.

Если я использую динамическую линковку, то хедеры надо включать, так я так и делаю но получаю ошибки -expected initializer before. Это значит что функции надо где то про инецализировать? В хедере или в main файле?

И ещё вопрос, можно это всё как то проще описать на Си?
0
ValeryS
Модератор
7130 / 5398 / 669
Регистрация: 14.02.2011
Сообщений: 18,218
14.11.2014, 09:50 #16
есть два типа библиотек
dll и lib
у тебя какой?
0
Bvdvv
3 / 3 / 0
Регистрация: 13.11.2014
Сообщений: 29
14.11.2014, 09:54  [ТС] #17
Цитата Сообщение от ValeryS Посмотреть сообщение
есть два типа библиотек
dll и lib
у тебя какой?
и длл и либ, производитель даёт возможность и стат. линковку делать и динамическую, но как я понял из апноутов, статическая сложней, там уже надо самому чуть ли не драйввера писать. Поэтому думаю динамическая будет проще. Какой должен быть порядок действий в таком случае?
0
ValeryS
Модератор
7130 / 5398 / 669
Регистрация: 14.02.2011
Сообщений: 18,218
14.11.2014, 11:06 #18
Цитата Сообщение от Bvdvv Посмотреть сообщение
Какой должен быть порядок действий в таком случае?
Тебе кузя уже написал
вот немного теории
http://www.codenet.ru/progr/visualc/Using-DLL.php
0
Bvdvv
3 / 3 / 0
Регистрация: 13.11.2014
Сообщений: 29
14.11.2014, 11:06  [ТС] #19
читаю про динамическое линкование, динам. библиотеки. И возник вопрос, если дллка создана в Visual Studio, может быть так что у MinGW компилятора будут проблемы с этой ддлкой? или если есть хедеры не будет?
0
ValeryS
Модератор
7130 / 5398 / 669
Регистрация: 14.02.2011
Сообщений: 18,218
14.11.2014, 11:17 #20
Цитата Сообщение от Bvdvv Посмотреть сообщение
И возник вопрос, если дллка создана в Visual Studio, может быть так что у MinGW компилятора будут проблемы с этой ддлкой?
Нет
Дллка это отдельная программа, как екзешник, с той разницей что разрешает внешним модулям пользовотся ей
т.е исполняемый код стандартизирован для ОС
в отличии от либ, которая представляет собой объектный модуль,который прилинковывается к программе
и внутреннее состояние модуля может, теоретически, отличатся от компилятора к компилятору
Правда я про такое не слышал

Добавлено через 1 минуту
Можно даже подключать дллки созданые на разных языках, например библиотека создана на С а подключаешь к шарпу
0
14.11.2014, 11:17
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.11.2014, 11:17
Привет! Вот еще темы с решениями:

Как создать файл DLL так, чтобы его можно было подключить к VBA Excel?
Пытаясь научиться подключать к VBA хотя бы самую тривиальную функцию на C++. ...

Подключить dll
Здравствуйте. Есть dll, в ней несколько функций, необходимо добавить еще одну,...

Подключить dll к программе
Здравствуйте. Нужна помощь новичку. У меня есть файл, к примеру biblioteka.dll....

Подключить к проекту на C++ DLL написанный на C#
Здравствуйте. Есть ли возможность подключить к проекту на C++, DLL написанный...


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

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

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