Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


Хостинг Портала RusFAQ.ru:
MosHoster.ru - Профессиональный хостинг на Windows 2008

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / C/C++

Выпуск № 1122
от 04.10.2008, 02:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 421, Экспертов: 42
В номере:Вопросов: 3, Ответов: 3

Нам важно Ваше мнение об этой рассылке.
Оценить этот выпуск рассылки >>


Вопрос № 145261: Имею код:<div style="margin:15px; margin-top:10px"><div><b><font color="gray">Код:</font></b></div><pre style="margin: 0px; padding: 6px; border: 1px inset; width: 650px; height: 100px; text-align: left; overflow: auto; color:#032866"> #include &l...
Вопрос № 145313: Здравствуйте уважаемые эксперты! Помогите, пожалуйста, с реализацией такой программы. Необходимо реализовать на языке C++ следующий набор операций с двусвязным линейным списком: ∙ инициализация списка; ∙ уничтожение списка с освобождением па...
Вопрос № 145362: Как перегнать число типа DOUBLE dbl в TCHAR szStr? в хелпе нашёл _gcvt_s, но она c TCHAR не работает...

Вопрос № 145.261
Имею код:
Код:

#include <mmsystem.h>
void CxxDlg::OnBnClickedButton1()
{
MCI_OPEN_PARMS OpenParm;
OpenParm.dwCallback = 0;
OpenParm.lpstrDeviceType = TEXT("CDAudio");
TCHAR szDrive[] = TEXT("G:");
OpenParm.lpstrElementName = szDrive;

if (!mciSendCommand(0, MCI_OPEN, MCI_OPEN_TYPE|MCI_OPEN_ELEMENT, (DWORD_PTR) (LPMCI_OPEN_PARMS)&OpenParm))
{
if (TRUE)
mciSendCommand(OpenParm.wDeviceID, MCI_SET, MCI_SET_DOOR_OPEN, 0);
else
mciSendCommand(OpenParm.wDeviceID, MCI_SET, MCI_SET_DOOR_CLOSED, 0);
mciSendCommand(OpenParm.wDeviceID, MCI_CLOSE, MCI_OPEN_TYPE|MCI_OPEN_ELEMENT, (DWORD_PTR) (LPMCI_OPEN_PARMS)&OpenParm);
}
// TODO: Add your control notification handler code here
}

и сообщение при попытке билда:
© Цитата:
error LNK2019: unresolved external symbol __imp__mciSendCommandW@16 referenced in function "public: void __thiscall CxxDlg::OnBnClickedButton1(void)" (?OnBnClickedButton1@CxxDlg@@QAEXXZ)

ЧТО Я НЕ ТАК СДЕЛАЛ???

Приложение:

Отправлен: 28.09.2008, 03:36
Вопрос задал: effort (статус: Студент)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Sk0rp
Здравствуйте, effort!

Вы подключили только объявление функции mciSendCommand, этого хватает для компиляции, но на этапе сборки уже нужен сам код функции, а вот его то вы и не включили в свой проект.
Реализация mciSendCommand располается в Winmm.lib
соответственно вам нужно или в настройках проекта указать прилинковывать этот lib файл или можно в своем коде написать:
#pragma comment(lib, "Winmm.lib")
Ответ отправил: Sk0rp (статус: 5-ый класс)
Ответ отправлен: 28.09.2008, 03:44
Оценка за ответ: 5
Комментарий оценки:
Я сделал в настройках проекта


Вопрос № 145.313
Здравствуйте уважаемые эксперты! Помогите, пожалуйста, с реализацией такой программы.
Необходимо реализовать на языке C++ следующий набор операций с двусвязным линейным списком:
∙ инициализация списка;
∙ уничтожение списка с освобождением памяти;
∙ добавление узла в голову списка;
∙ добавление узла в хвост списка;
∙ удаление узла из головы списка;
∙ удаление узла из хвоста списка;
∙ выдача текущего списка на экран
∙ добавить новый узел в указанную позицию;
∙ поменять местами первый и последний узлы.
Отправлен: 28.09.2008, 16:43
Вопрос задал: Borman Karlovich (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Denisss

Здравствуйте, Borman Karlovich!

В приложении находится пример подобной реализации (сохраните в файл с именем dllist.h). Список выполнен в виде шаблона класса. Пример использования шаблона:
Код:
#include <iostream>
#include "dllist.h"

using std::cout;
using std::endl;

int main()
{
// Список целых чисел (int)
DLList<int> list;

int i;
// Вставка 5 элементов в конец списка
for (i = 1; i <= 5; ++i) list.push_back(i);

// Вставка 5 элементов в начало списка
for (i = -1; i >= -5; --i) list.push_front(i);
// Вставка в позицию с номером 5 (нумерация от нуля)
list.insert(5, 6);
// Вывод списка
list.print(cout); cout << endl;

// Удаление элемента из начала списка
list.pop_front();
// Проверка
list.print(cout); cout << endl;
// Удаление из конца списка
list.pop_back();
// Проверка
list.print(cout); cout << endl;
// Меняем первый и последний элементы местами
list.swapFrontBack();
// Доступ к элементам списка по индексу
list[4] = 100;
list.print(cout);
// Размер списка
cout << " Size: " << list.size() << endl;

return 0;
}


Список выполняемых классом DLList<T> операций:
∙ инициализация списка;
- конструктор (выполняется автоматически, при создании объекта)
∙ уничтожение списка с освобождением памяти;
- деструктор (автоматически, при удалении объекта)
∙ добавление узла в голову списка;
- void push_front(...)
∙ добавление узла в хвост списка;
void push_back(...)
∙ удаление узла из головы списка;
- T pop_front()
∙ удаление узла из хвоста списка;
- T pop_back()
∙ выдача текущего списка на экран
- void print(...)
∙ добавить новый узел в указанную позицию;
- void insert(...)
∙ поменять местами первый и последний узлы.
- void swapFrontBack()

Удачи!

Приложение:

---------
Все должно быть сделано настолько просто, насколько это возможно. Но не проще. (с) А.Эйнштейн

Ответ отправил: Denisss (статус: Профессор)
Россия, Москва
ICQ: 281599577
----
Ответ отправлен: 29.09.2008, 20:08


Вопрос № 145.362
Как перегнать число типа DOUBLE dbl в TCHAR szStr? в хелпе нашёл _gcvt_s, но она c TCHAR не работает

Приложение:

Отправлен: 28.09.2008, 23:18
Вопрос задал: effort (статус: Студент)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Sk0rp
Здравствуйте, effort!
Для начала нужно понимать, что такое THCAR. Это макрос, который в зависимости от настройки проекта: "Использовать или не использовать юникод" - превращается в wchar_t или в char. (если wchar_t не определен, но нужен, то в short int). Большинство функций для работы со строками имеют 2 варианта: для юникода и не юникода и имя в виде макроса, который выбирает нужную. Но не все, _gcvt например юникодной версии не имеет, но можно подточить напильником.
Я в реальном проекте, где это место критично по скорости, сделал так: конвертил с помощью gcvt в char*, а wchar_t* получал вручную (вариант string_cast)
Перегруженый вариант string_cast с char * нужен, что бы программа компилировалась при любых настройках проекта.
Если не критична скорость, то можно печатать в строку с помощью: _sntprintf, это удобно т.к. можно тонко настроить формат перевода.

Приложение:

Ответ отправил: Sk0rp (статус: 5-ый класс)
Ответ отправлен: 29.09.2008, 00:45
Оценка за ответ: 5
Комментарий оценки:
Отличный ответ, а я делал с помощью StringCbPrintf


Вы имеете возможность оценить этот выпуск рассылки.
Нам очень важно Ваше мнение!
Оценить этот выпуск рассылки >>

Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2008, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Техподдержка портала, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале

∙ Версия системы: 5.3 RC 2 от 09.09.2008

Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное