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

Как открыть привод в DEV C++? - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 35, средняя оценка - 4.74
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
15.07.2010, 17:20     Как открыть привод в DEV C++? #1
Вся инфа, найденная в гугле, сводится к сиспользованию mciSendString
Неработоспособность этой функции не предполагается. Но, тем не менее, она имеет место быть.
Это не работает:

C++
1
2
3
4
5
6
7
#include <windows.h>
#include <mmsystem.h>
 
int main() { 
 mciSendString ("Set cdaudio door open wait", 0, 0, 0 );
 return 0;
}
Ошибка линкёра, типа он первый раз видит функцию mciSendString. Это при том, что в файле mmsystem.h написано:
C++
1
2
MCIERROR WINAPI mciSendStringA(LPCSTR,LPSTR,UINT,HWND);
MCIERROR WINAPI mciSendStringW(LPCWSTR,LPWSTR,UINT,HWND);
Пробовал приводить типы всяко. Так, например:

C++
1
2
3
4
5
6
7
8
#include <windows.h>
#include <mmsystem.h>
 
int main() { 
 CONST CHAR stroka [128]= "Set cdaudio door open wait";
 mciSendString ((LPCSTR)stroka, 0, 0, 0 );
 return 0;
}
Бесполезно. Друзья! Пмогите, пожалуйста! Спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.07.2010, 17:20     Как открыть привод в DEV C++?
Посмотрите здесь:

C++ Как запустить в Dev C++
C++ Как вставить картинку в Dev-C++
C++ Как использовать Dev C++?
Как отправить E-mail Dev C++ C++
C++ Dev-C++ Как пользоваться?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
rrock.ru
9 / 9 / 1
Регистрация: 15.07.2010
Сообщений: 19
15.07.2010, 17:44     Как открыть привод в DEV C++? #2
У тебя 2-ой параметр должен быть NULL...

Вот пример работы:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>  
#include <windows.h> 
#include <mmsystem.h>
 
using namespace std;
 
int main()  
{  
  mciSendString("open CDAudio", NULL, 0, NULL);
  Beep(440,1000);   
  cout << "Opening CD-ROM door ..." << endl;  
  mciSendString("set CDAudio door open", NULL, 0, NULL);  
 
  cout << "Closing the CD-ROM door in 5 seconds ..." << endl;  
  Sleep(5000);  
  mciSendString("set CDAudio door closed", NULL, 0, NULL);  
 
  mciSendString("close CDAudio", NULL, 0, NULL);
 
  cin.get(); 
  return 0;  
}
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
15.07.2010, 17:50  [ТС]     Как открыть привод в DEV C++? #3
Вот 4 раза вызывается
mciSendString

и 4 раза линкёр говорит, что он её не узнаёт

C++
1
2
3
4
[Linker error] undefined reference to `mciSendStringA@16'   
[Linker error] undefined reference to `mciSendStringA@16' 
[Linker error] undefined reference to `mciSendStringA@16' 
[Linker error] undefined reference to `mciSendStringA@16'
rrock.ru
9 / 9 / 1
Регистрация: 15.07.2010
Сообщений: 19
15.07.2010, 17:56     Как открыть привод в DEV C++? #4
а, ну молодец... а кто либу Winmm.lib будет подключать?
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
15.07.2010, 17:58  [ТС]     Как открыть привод в DEV C++? #5
Ты тень на плетень не наводи, как в твоём исходнике написано,так я и сделал.
rrock.ru
9 / 9 / 1
Регистрация: 15.07.2010
Сообщений: 19
15.07.2010, 18:06     Как открыть привод в DEV C++? #6
Вообще то, если ты внимательно посмотришь описание этой API-функции, то увидишь, что для её работы необходима либа Winmm.lib..

Так что RTFM: http://msdn.microsoft.com/en-us/libr...61(VS.85).aspx

P.S. можешь просто добавить в начало кода
C++
1
#pragma comment(lib,"Winmm.lib")
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
15.07.2010, 18:13  [ТС]     Как открыть привод в DEV C++? #7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>  
#include <windows.h> 
#include <mmsystem.h>
#pragma comment(lib,"Winmm.lib")
 
using namespace std;
 
int main()  
{  
  mciSendString("open CDAudio", NULL, 0, NULL);
  Beep(440,1000);   
  cout << "Opening CD-ROM door ..." << endl;  
  mciSendString("set CDAudio door open", NULL, 0, NULL);  
 
  cout << "Closing the CD-ROM door in 5 seconds ..." << endl;  
  Sleep(5000);  
  mciSendString("set CDAudio door closed", NULL, 0, NULL);  
 
  mciSendString("close CDAudio", NULL, 0, NULL);
 
  cin.get(); 
  return 0;  
}
Вот ошибки
C++
1
2
3
4
[Linker error] undefined reference to `mciSendStringA@16'   
[Linker error] undefined reference to `mciSendStringA@16' 
[Linker error] undefined reference to `mciSendStringA@16' 
[Linker error] undefined reference to `mciSendStringA@16'
Вообще, я может и ошибаюсь, но сдаётся мне эта библиотека тут ни пр ичём. ОНа должна автоматом подключаться. Я ведь не подключаю вручную ни kernel32, ни юзер. компилятор и линкёр сам прописывает их в таблицу импорта и всё остальное делают. Но как бы то ни было.
rrock.ru
9 / 9 / 1
Регистрация: 15.07.2010
Сообщений: 19
15.07.2010, 19:21     Как открыть привод в DEV C++? #8
так. ты по-ходу компилишь в mingw.. через Dev-C++?

Добавлено через 1 минуту
Есть стандартный набор библиотек, которые подключаются по-умолчанию.. winmm в них не входит, поэтому её нужно подключать ручками..

Добавлено через 29 минут
туплю..

Вобщем в Dev-C++ нужно зайти в Проект>>Параметры проекта>>Параметры>>Добавить библиотеку>>libwinmm.a

За точность пути не отвечаю.. Писал по памяти..
А так можно и из коммандной строки:
Bash
1
g++ main.cpp -o main.exe -Wl,c:\mingw\lib\libwinmm.a
только подставить свои имена файлов и путь до libwinmm.a.. по идее он должен быть "c:\dev-cpp\lib\libwinmm.a"
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
15.07.2010, 20:00  [ТС]     Как открыть привод в DEV C++? #9
Что ж, из командной строки получилось, спасибо.

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Но как мне быть, если я НЕ ИСПОЛЬЗУЮ ПРОЕКТЫ?

Ну то есть вообще. ТО есть по факту у меня проекты, но формально- нет и твой способ не подойдёт?

То есть я делаю так: создаю папку, в ней главный файл main.cpp, ну и в эту же папку кидаю другие файлы *cpp и потом их прописываю вроде как заголовочные. Потом просто компилю main.cpp и всё

На ютуби тоже нашёл видео как подсоединить эту библиотеку К ПРОЕКТУ.
http://www.youtube.com/watch?v=awl-nIlzaVc

А к отдельному файлу- никак, что ли?
Единственное, что смог сделать: сервис- парамеры среды- параметры компилятора- библиотеки

Там была строчка
lib
Я приписал, стало так:
Код C++
1
2
3
lib
E:/Dev-Cpp/lib/libwinmm.a

(У меня диск E)
Но всё равно не открывается. Или всё же необходимо работать именно с такой сущностью, как ПРОЕКТЫ? Мне неохота переучиваться, честно говоря ради того, чтобы иметь возможность подключать библиотеки... Извините...

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Наконец, так тоже красиво: лезем в параметры компилятора и добавляем строчку
C++
1
-Wl,E:\Dev-Cpp\lib\libwinmm.a
В командную строку ЛИНКЁРА
Тоже работает

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Хотелось бы всё ж таки услышать мнение по второму способу.
rrock.ru
9 / 9 / 1
Регистрация: 15.07.2010
Сообщений: 19
15.07.2010, 20:23     Как открыть привод в DEV C++? #10
Гм.. ну если из консоли.. то тут 2 варинта:
1) вручную компилить в объектники все .cpp-шки, а потом линковать всё вместе с подключением libwinmm.a
2) создать Makefile для всего этого распутства и компилить через make
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
15.07.2010, 20:32  [ТС]     Как открыть привод в DEV C++? #11
А не из консоли? ТОлько через создание проекта?
rrock.ru
9 / 9 / 1
Регистрация: 15.07.2010
Сообщений: 19
15.07.2010, 20:35     Как открыть привод в DEV C++? #12
да.. создавай проект и добавляй туда необходимые файлы.. и в настройках проекта добавляешь либу.
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
15.07.2010, 20:38  [ТС]     Как открыть привод в DEV C++? #13
Спасибо
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.11.2010, 23:35     Как открыть привод в DEV C++?
Еще ссылки по теме:

Как компилировать в Dev C++ C++
Как запустить програму в dev c++? C++
C++ Как досоставить меню в Dev C++

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

Или воспользуйтесь поиском по форуму:
VtaMC
Просто Веталь
 Аватар для VtaMC
159 / 99 / 5
Регистрация: 11.05.2009
Сообщений: 628
12.11.2010, 23:35     Как открыть привод в DEV C++? #14
Сделал, как показано в видео, всё заработало!
Yandex
Объявления
12.11.2010, 23:35     Как открыть привод в DEV C++?
Ответ Создать тему
Опции темы

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