Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по программированию на C/С++

Автор: Garrett
Дата сообщения: 11.01.2012 21:48
V0lt
Я бы написал & перед ch в scanf'e...
И программа должна быть юникодной, в противном случае надо написать объявление как "char ch;" либо "TCHAR ch;" .

И по поводу ch[0] == ','
Надо писать либо ch == ',' либо ch == _T(',')
Автор: V0lt
Дата сообщения: 11.01.2012 21:56
Garrett
программа уникоидная


Цитата:
Надо писать либо ch == ',' либо ch == _T(',')

у меня так компилятор ругается.
Автор: Garrett
Дата сообщения: 11.01.2012 21:58
V0lt
wchar_t ch;
...
... ch == _T(',') ...

не должно быть ошибок
Автор: V0lt
Дата сообщения: 11.01.2012 22:13

Цитата:
wchar_t ch;
...
... ch == _T(',') ...

не должно быть ошибок

Если _stscanf_s(.. ch, 1, ...), то вылетает и говорит, что нельзя присваивать необъявленной переменной.
Если _stscanf_s(.. &ch, 1, ...), то работает, но условие не выполняется, т.к. ch пуста.
Автор: Garrett
Дата сообщения: 11.01.2012 22:24
V0lt
Завтра на работе проверю, но попробуйте _stscanf( tokenstring, "%c", &ch );
Автор: V0lt
Дата сообщения: 11.01.2012 22:35
вот так вроде работает

Код: CString str = _T("300, 23.976");
unsigned int frame;
wchar_t ch;
float fps;
int result = _stscanf_s(str, _T("%u%1s%f"), &frame, &ch, 2, &fps);
if (result == 3 && ch == _T(',')) {
m_time = (int)(frame/fps+0.5);
}
Автор: Garrett
Дата сообщения: 11.01.2012 22:46
V0lt
1. Я не пользуюсь "безопасными" функциями (***_s), а чтобы компилятор не ругался объявляю #define _CRT_SECURE_NO_WARNINGS
2. %с читает символ, а пробел тоже символ
3. если у тебя нефиксированный формат, и запятая может предваряться и завершаться пробелами, то надо использовать регулярные выражения для распарсивания строки. См. CAtlRegExp, либо из буста подключи.
4. и твой пример некорректный...
Автор: V0lt
Дата сообщения: 12.01.2012 04:47

Цитата:
4. и твой пример некорректный...

Автор: bomzzz
Дата сообщения: 12.01.2012 05:52
подскажите плиз как в MultiMedia MCI отобразить BMP картинку в памяти созданную
CreateCompatibleBitmap
Автор: Garrett
Дата сообщения: 12.01.2012 08:17
V0lt
Если пишешь гибридную программу для компиляции как юникодную или неюникодную, то применяются спецмакросы _Т, которые в зависимости от условия юникодности _UNICODE раскрываются в простую строку("...") или в юникодную строку(L"..."), и соответственно TCHAR ch становится то "char ch", то "wchar_t ch", и все функции _st* тоже вызываются или простые или юникодные варианты (например как sscanf_s или swscanf_s).

У тебя
wchar_t ch;
int result = _stscanf_s(str, _T("%u%1s%f"), &frame, &ch, 2, &fps);

а должно что-то вроде
для гибридной
TCHAR ch;
int result = _stscanf_s(str, _T("%u%с%f"), &frame, &ch, sizeof(ch)/sizeof(TCHAR), &fps);

или чисто для юникодной
wchar_t ch;
int result = swscanf_s(str, L"%u%с%f", &frame, &ch, 1, &fps);

PS. Если где ошибся, то поправьте меня.
Автор: bomzzz
Дата сообщения: 14.01.2012 02:09
как плеер сделать? mciSendCommand - сделал воспроизведение файла, а как перехватить окно в котром файл воспроизводится? хуком попробовал не получается - видимо это тред отдельный со своим ИД. не не могу нагуглить с какой стороны взяться

нашел кажеца MCIWndCreate
Автор: karakurt2
Дата сообщения: 14.01.2012 11:33
bomzzz
Media Control Interface -- это вчерашний день. Пробуйте работать с графами DirectShow
Автор: bomzzz
Дата сообщения: 14.01.2012 13:30
попадалось такое, вообще не понял зачем оно. на русском ниче найти несмог.
Автор: karakurt2
Дата сообщения: 14.01.2012 14:20
На русском техническую литературу читать вредно, перевод зачастую просто искажает смысл. По DirectShow вот книга неплохая

Цитата:

Programming Microsoft DirectShow for Digital Video and Television / Mark D. Pesce.

Скачать можно с 46-го DVD сборника научно-технической литературы, выложенного на rutracker.org
Автор: bomzzz
Дата сообщения: 14.01.2012 14:41
дая на английском начал читать мсдн и вообще ничего не смог понять. надо зоть что то понять для начала.

Добавлено:
http://rutracker.org/forum/viewtopic.php?t=1445596

отсюда что ли?
Автор: VitaliM
Дата сообщения: 14.01.2012 14:47
karakurt2

Цитата:
Скачать можно с 46-го DVD

а поточнее можно ссыль дать. рутрэкер большой, хрен найдешь...
ЗЫ: уже увидел...
Автор: bomzzz
Дата сообщения: 14.01.2012 14:49
VitaliM
а я не могу найти
Автор: karakurt2
Дата сообщения: 14.01.2012 14:50
это подмножество DirectX служит в качестве замены всяким там Video for Windows, Media Control Interface и других мультимедийных API. поток обработки данных конструируется в виде графа, состоящего из отдельных компонент, отвечающих за узкую задачу.
Автор: V0lt
Дата сообщения: 14.01.2012 14:54
bomzzz
Вбей в поиск DVD 046/053
Автор: karakurt2
Дата сообщения: 14.01.2012 14:56
Здесь 46 DVD
Автор: bomzzz
Дата сообщения: 14.01.2012 14:58
V0lt
вбил. торрент файл открыл блокнотом там внутри нет слова директшоу

Добавлено:
Pesce M.D. - Programming Microsoft DirectShow for Digital Video and Television(2002)(414).chm

Добавлено:
Pesce M.D. - Programming Microsoft DirectShow for Digital Video and Television(2002)(414).ZIP
Автор: kvazigorynich
Дата сообщения: 14.01.2012 19:43

Код:
LPVOID buffer;
DWORD got;
HANDLE hFile;
hFile = ::CreateFileA("test", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
SetFilePointer(hFile, 2, NULL, FILE_BEGIN);
::ReadFile(hFile, &buffer, 4, &got, NULL);
printf("%x\n", (unsigned __int64)buffer);
::CloseHandle(hFile);
Автор: kotlomoy
Дата сообщения: 14.01.2012 22:32
kvazigorynich
Порядок байт как раз таки не меняется. В Windows числа в памяти располагаются в порядке от младшего байта к старшему, что вы и увидели. По смещению 2 действительно лежит число 0x32317412.
Если нужно вывести содержимое памяти побайтно, то и выводите побайтно - для этого есть тип char.
Автор: kvazigorynich
Дата сообщения: 15.01.2012 13:59
Ничего не понял.

В файле по смещению 2 последовательность hex 12743132
В буфере после чтения последовательность hex 12743132
Вывод через printf происходит в обратном порядке из-за того что при переводе в __int64 память считывается как little-endian?
Автор: kotlomoy
Дата сообщения: 15.01.2012 17:43
kvazigorynich
Да, числа в памяти лежат в little-endian
Автор: V0lt
Дата сообщения: 16.01.2012 19:48
Вопрос по типу size_t для индексации массивов на x64-машине.
Всегда ли полезно использовать size_t вместо unsigned int?
Автор: Eminence
Дата сообщения: 16.01.2012 20:02

Цитата:
Всегда ли полезно использовать size_t вместо unsigned int?

Всегда - так эффективнее обеспечивается совместимость и переход на другую платформу
Автор: V0lt
Дата сообщения: 16.01.2012 20:26

Цитата:
Всегда - так эффективнее обеспечивается совместимость и переход на другую платформу

Что это значит? Другая платформа не понимает 32-битные целые?

Я читал про "а вдруг нам понадобиться массив с числом элементов более 4294967296", но для моих задач это несусветный бред.
Автор: Eminence
Дата сообщения: 16.01.2012 20:34
Размерность - в 64-битной платформе size_t определяется как 64 разряда, в 32-битной - как 32. Если использовать unsigned int, то 64-битный компиллятор будет везде выдавать warning типа "Приведение к меньшей разрядности, возможна потеря данных". Некритично, конечно, но некрасиво
Автор: V0lt
Дата сообщения: 21.01.2012 18:16

Код: DWORD dwPos = 123;
SetFilePointerEx(hFile, *(LARGE_INTEGER*)(LONGLONG)dwPos, NULL, FILE_BEGIN);
SetFilePointerEx(hFile, *(LARGE_INTEGER*)(LONGLONG)456, NULL, FILE_BEGIN);

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193

Предыдущая тема: не знаю как назвать тему :-)


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.