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

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


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

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

Выпуск № 640
от 17.01.2007, 10:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 443, Экспертов: 56
В номере:Вопросов: 9, Ответов: 16


Вопрос № 70487: Здравствуйте, эксперты. Вопрос такой. У меня прога работает с платой которая подключена к PCI. на плате заведены контакты от устройств. как мне связать прогу в реальным временем, что то типа таймера что ли сделать? ...
Вопрос № 70507: Уважаемые эксперты. Подскажите как правильно экспортировать классы из ехе-зешника создаю DLL-ку (статическая линковка) под си-билдером функции экспортировать могу- не получается экспортировать классы тестовый примерчик с одним класс...
Вопрос № 70510: Люди пожалуйста помогите с созданием програмы на С++!!! Задание такое !!! Описать структуру с именем student 1)Вводится Фамилия И.О. 2)№ группы. 3)Успеваемость. дополнительные условия а)ввод ф.и.о с клавы б)записи ...
Вопрос № 70525: Всем привет! Меня интересует что из себя представляет сортировка методом квадратичной выборки и как она работает?...
Вопрос № 70534: ШАЛОМ БРАТВА. ХОЧУ ИЗУЧАТЬ С++ . КАКАЯ КНИГА НАПИСАННА НОРМАЛЬНЫМ ЯЗЫКОМ ДЛЯ НАЧИНАЮЩЕГО ИЗУЧАТЬ С++....
Вопрос № 70541: Здравствуйте, Скажите пожалуйса как можно Реализовать структуру данных "бинарное дерево" в виде параметризованного класса. Класс должен позволять хранить объекты произвольного типа добавлять элементы в дерево и.т.д. И что такое...
Вопрос № 70583: Здравствуйте, уважаемые эксперты! Помогите решить задачу. Разработать функцию, которая находит в строке первый символ, который не входит в другую заданную строку. При реализации функции запрещается пользоваться функциями библиотек языка С....
Вопрос № 70585: Подскажите как приложение получает сообщения от Windows ? И что куда и откуда перпедается, по функциям и ОС. И еще ф-ия DispatchMessage() из цикла обраб.сообщ. возвращает сообщение в Windows, или в Оконную процедуру? Хочу понять доск...
Вопрос № 70592: Не знаю куда задать вопрос сюда или в рассылку по API. Подскажите как приложение получает сообщения от Windows, с помощью цикла и оконной процедуры. Я понимаю что сообщение извлекается циклом обраб.сообщений ф-ей DispatchMessage(), далее если...

Вопрос № 70.487
Здравствуйте, эксперты. Вопрос такой. У меня прога работает с платой которая подключена к PCI. на плате заведены контакты от устройств. как мне связать прогу в реальным временем, что то типа таймера что ли сделать?
Отправлен: 11.01.2007, 16:06
Вопрос задал: Holyman (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Tek
Здравствуйте, Holyman!
Мы все свои устройства(фискальник, считыватель, терминал чипованых карт, колонки АЗС) опрашиваем и командуем в отдельном потоке, работающей без таймера просто зацикленной до момента смены признака работы (синхронизация по мьютексу).
Типа:
while (working)
{
WaitForSingleObject(hMutex, INFINITE)
// опрос соответсвующего устройства
ReleaseMutex(hMutex);
}

Но для нас критично время отклика на запрос устройства(при задержке некоторые устройства впадают в ступор). А в принципе можно без отдельного потока по таймеру или вааще при необходимости если устройство чисто синхронной работы.

---------
WinApi - жутко неудобные костыли, MFC и VCL - немногим полезнее, но ничего лучше еще не создано (C)Почти Уинстон Черчилль :)
Ответ отправил: Tek (статус: 6-ой класс)
Ответ отправлен: 11.01.2007, 16:29

Отвечает: ramok
Здравствуйте, Holyman!

Общепринятая практика: необходимо написать драйвер вашего устройства. Оно и понятно, на как на уровне приложений большинство ОС не обеспечивают реальновременные интервалы.

Притом совершенно необязательно реализовывать весь фунционал стандартного драйвера, а только ту часть которую необходимо.

Написание драйвера зависит от вашей ОС:
1. для Windows необходимо использовать DDK(Driver Development Tools) для вашей версии Windows. Вот вводная http://www.evm.narod.ru/ddk.html
2. у открытых ОС примеры можно подсмотреть прямо в исходниках этих OC, есть и литература соответвтвующая, например для linux:
http://lwn.net/Kernel/LDD3/
и перевод части http://rus-linux.net/MyLDP/BOOKS/ldd2/index.html
Ответ отправил: ramok (статус: 8-ой класс)
Ответ отправлен: 11.01.2007, 19:56


Вопрос № 70.507
Уважаемые эксперты. Подскажите как правильно экспортировать классы
из ехе-зешника создаю DLL-ку (статическая линковка) под си-билдером
функции экспортировать могу- не получается экспортировать классы

тестовый примерчик с одним классом компилит без ошибок
//DLLMAINCPP.cpp
#define _DLLMAINCPP //
#include <vcl.h>
#include <windows.h>
#pragma hdrstop
#include "dllmain.h"
#pragma argsused

int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
return 1;
}

void Message(char* p)
{
Application->MessageBox(p,"From DLL",IDOK);
}
void test::hello(char* p)
{
Message(p);
}

//dllmain.h
void __declspec(dllexport) Message(char *s);
__declspec(dllexport) class test
{
public:
void hello(char* s);
};

если же в своей длл-ке
пишу в h-файле:
__declspec(dllexport) class tsub_window_manager: public tmdi_manager {....
для каждого экспортируемого класса
в ответ
[Linker Error] Unresolved external для кучи функций(не из этих классов а вобще из других файлов)
все инклуды подключены и вообще ехе-зешник прототип компилируется нормально
подскажите как правильно экспортировать классы
может что-то нужно дописать в cpp-файле?
Отправлен: 11.01.2007, 17:49
Вопрос задал: Texnokrat (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: ramok
Здравствуйте, Texnokrat!

при объвялении класса используем макросс AFX_CLASS_EXPORT

http://doks.gorodok.net/?p=94#t10
Ответ отправил: ramok (статус: 8-ой класс)
Ответ отправлен: 11.01.2007, 19:41
Оценка за ответ: 3
Комментарий оценки:
в вышеприведеннном примере сделал
class AFX_EXT_CLASS test
получил
Error E2450 Dllmaindllmain.h 14: Undefined structure 'AFX_EXT_CLASS'
Error E2450 Dllmaindllmain.h 14: Undefined structure 'AFX_EXT_CLASS'
Error E2449 Dllmaindllmain.h 14: Size of 'test' is unknown or zero
Error E2141 Dllmaindllmain.h 14: Declaration syntax error
Error E2090 DllmainDllmain.cpp 18: Qualifier 'test' is not a class or namespace name
Error E2040 DllmainDllmain.cpp 18: Declaration terminated incorrectly
при использовании __declspec(dllexport)
все было нормально
а кроме того не хотелось бы завязываться на MFC

Отвечает: kool
Здравствуйте, Texnokrat!
Под VC++ все работает. См. приложение.
Билдер - сплошной глюк.
Удачи!

Приложение:

Ответ отправил: kool (статус: 3-ий класс)
Ответ отправлен: 11.01.2007, 23:15
Оценка за ответ: 3
Комментарий оценки:
тестовый примерчик у меня компилировался и раньше проблема возникает когда таких классов несколько хотя я делаю тоже самое но линковщик перестает видеть остальные функции длл-ки использованные в этих классах я думал может тут какое-то сокрытие имен происходит или надо еще какой-нибудь extern добавить причем надо именно на билдере так как длл-ка большая чтобы ее переделывать


Вопрос № 70.510
Люди пожалуйста помогите с созданием програмы на С++!!!
Задание такое !!! Описать структуру с именем student
1)Вводится Фамилия И.О.
2)№ группы.
3)Успеваемость.

дополнительные условия
а)ввод ф.и.о с клавы
б)записи упорядочены по номеру группы в порядке возрастания
в)вывод на дисплей ф.и.о., № группы для всех студентов которые имеют средний бал 4.0
г)если трудентов нет вывод специального сообщения
(с использованием текстового файла)
Отправлен: 11.01.2007, 17:57
Вопрос задал: VampireC++ (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Терсков Сергей
Здравствуйте, VampireC++!
Вот примерный вариант. Поля в файле data.txt должны разделяться знаком ";".

//////

Пример файла data.txt

Иванов Иван Иванович;4;3.7
Петров Петр Петрович;4;4.2
Сидоров Сидор Сидорович;2;4.1
Сергеев Сергей Сергеевич;3;4.4

//////

Приложение:

Ответ отправил: Терсков Сергей (статус: 4-ый класс)
Ответ отправлен: 12.01.2007, 04:14
Оценка за ответ: 5


Вопрос № 70.525
Всем привет!
Меня интересует что из себя представляет сортировка методом квадратичной выборки и как она работает?
Отправлен: 11.01.2007, 19:49
Вопрос задал: POSTAL (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: ramok
Здравствуйте, POSTAL!

можно почитать тут
http://articles.org.ru/cfaq/index.php?qid=2128&frommostrecent=yes
Ответ отправил: ramok (статус: 8-ой класс)
Ответ отправлен: 11.01.2007, 20:01


Вопрос № 70.534
ШАЛОМ БРАТВА. ХОЧУ ИЗУЧАТЬ С++ . КАКАЯ КНИГА НАПИСАННА НОРМАЛЬНЫМ ЯЗЫКОМ ДЛЯ НАЧИНАЮЩЕГО ИЗУЧАТЬ С++.
Отправлен: 11.01.2007, 20:33
Вопрос задал: Bizhuk (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: kool
Здравствуйте, Bizhuk!
--------------------------
В.В. Подбельский "Язык С++"
Удачи!
--------------------------
Ответ отправил: kool (статус: 3-ий класс)
Ответ отправлен: 11.01.2007, 23:21

Отвечает: Tamashev Denis M
Здравствуйте, Bizhuk!
Читай С++ глазами хакера...
Плюс есть книга я непомню как она называется на на начинается С++.NET + могу выслать на почту список литературы.
Ответ отправил: Tamashev Denis M (статус: 2-ой класс)
Ответ отправлен: 12.01.2007, 09:18


Вопрос № 70.541
Здравствуйте, Скажите пожалуйса как можно Реализовать структуру данных "бинарное дерево" в виде параметризованного класса. Класс должен позволять
хранить объекты произвольного типа
добавлять элементы в дерево и.т.д.
И что такое параметризованный класс.
Отправлен: 11.01.2007, 21:08
Вопрос задал: agp200431 (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Терсков Сергей
Здравствуйте, agp200431!
Параметризованный класс - это класс на основе шаблонов. Например все контейнеры STL - это параметризованные классы. Т.е. один и тот же класс может использоваться для различных типов данных. Например можно использовать как форму vector<int> iv; (целочисленный массив), так и vector<double> dv (массив вещественных чисел). Для более глубокого понимания механизма шаблонов необходимо читать теорию C++. В примере дан параметризованный класс двоичного дерева с функцией добавления элементов.

Приложение:

Ответ отправил: Терсков Сергей (статус: 4-ый класс)
Ответ отправлен: 12.01.2007, 05:08
Оценка за ответ: 5
Комментарий оценки:
Большое спасибо


Вопрос № 70.583
Здравствуйте, уважаемые эксперты! Помогите решить задачу.
Разработать функцию, которая находит в строке первый символ, который не входит в другую заданную строку.
При реализации функции запрещается пользоваться функциями библиотек языка С.
Отправлен: 12.01.2007, 07:59
Вопрос задал: Rusl (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 3)

Отвечает: Lemeshev Konstantin
Здравствуйте, Rusl!
В строке Str1 ищем первый символ не входящий в строку Str2. Возвращаем номер этого символа в строке Str1 или -1 если такого символа нет.
Код в приложении.

Приложение:

Ответ отправил: Lemeshev Konstantin (статус: 2-ой класс)
Ответ отправлен: 12.01.2007, 08:22

Отвечает: Терсков Сергей
Здравствуйте, Rusl!
Вот еще версия. Здесь не используются никакие флаги, но т.к. CRT функциями пользоваться нельзя, то пришлось написать собственную функцию int str_len(const char *str);. Ноблагодаря ей код выгдядит попроще, да и работу функция int find_first_not(const char *s1, const char *s2) заканчивает сразу при нахождении нужного символа.

Приложение:

Ответ отправил: Терсков Сергей (статус: 4-ый класс)
Ответ отправлен: 12.01.2007, 09:00

Отвечает: Sergijj
Здравствуйте, Rusl!

Код в приложении.
Не самый оптимальный вариант, но зато учебно-понятный.

Приложение:

---------
Стучитесь! И Вас откопают...

Ответ отправил: Sergijj (статус: 7-ой класс)
Ответ отправлен: 12.01.2007, 09:35

Отвечает: Torsten
Здравствуйте, Rusl!
Код в приложении.
Функция StrDif - принимает два параметра, исходная строка из которой будут братся символы, и строка в которой ищется 1-ый символ которого нет в строке 1. Возвращает индекс символа, который есть в 1-ый строке, но нет во 2-ой.
SymbolCmpStr - принимает два параметра, 1-ый символ, 2-ой строка, в которой ищется этот символ. Если символ есть в строке, возращает истину, если символа в строке нет - ложь.

Демо-программа получает параметры из командной строки. После создания исполняемого файла, нужно запускать:
<name.exe> <string1> <string2>
name.exe - имя исполняемого файла
string1 - строка из которой берем символи для сравнения
string2 - строка в которой ищем символ не входящий в 1-ую строку.

Примеры:
strdif.exe hello hallo
First symbol in string 'hello'
not contain in string 'hallo'
at 2 position, value = 'e'.

strdif.exe hello hole
Strings has equal character sets.

Приложение:

---------
#define MAGIC_NUMBER 0xdeface

Ответ отправил: Torsten (статус: 4-ый класс)
Ответ отправлен: 12.01.2007, 11:18


Вопрос № 70.585
Подскажите как приложение получает сообщения от Windows ?
И что куда и откуда перпедается, по функциям и ОС.
И еще ф-ия DispatchMessage() из цикла обраб.сообщ. возвращает
сообщение в Windows, или в Оконную процедуру?
Хочу понять досконально как енто работает, не могу разобраться.
Отправлен: 12.01.2007, 09:08
Вопрос задал: DEVILL (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Tamashev Denis M
Здравствуйте, DEVILL!
SendMessage();
=))) Юзай на здоровье.
Ответ отправил: Tamashev Denis M (статус: 2-ой класс)
Ответ отправлен: 12.01.2007, 09:20

Отвечает: dentist
Здравствуйте, DEVILL!

The DispatchMessage function dispatches a message to a window procedure. It is typically used to dispatch a message retrieved by the GetMessage function.
т.е.: в оконную процедуру ;-)

и давайте попробуем разобраться что происходит (не так уж и сложно).

for (;;)
{
// из очереди сообщений
// берём соответствующее данному потоку
// сообщенние
if (GetMessage(&msg, NULL, 0, 0))
{
// переводим virtual-key сообщения в character
// без этого по всей видимости, в определённых случаях, можно и обойтись
TranslateMessage(&msg);
// и собсно отправляем обработчику сообщений нашей програмулины
DispatchMessage(&msg);
} else {
return 0;
}
}
---------
"Software is like sex, it's better then it's free" (c) Linus Torvalds
Ответ отправил: dentist (статус: 8-ой класс)
Ответ отправлен: 12.01.2007, 10:54


Вопрос № 70.592
Не знаю куда задать вопрос сюда или в рассылку по API.
Подскажите как приложение получает сообщения от Windows, с помощью цикла и оконной процедуры.
Я понимаю что сообщение извлекается циклом обраб.сообщений ф-ей DispatchMessage(), далее если все
нормально переается в оконную процедуру, а дальше...
И еще, ф-я DispatchMessage() если передает сообщение далее,
то куда, сразу в оконную ф-ю, или через Windows?
Отправлен: 12.01.2007, 09:45
Вопрос задал: DEVILL (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Tek
Здравствуйте, DEVILL!
Согласно MSDN, функция DispatchMessage() передет сообщение сразу в оконную процедуру целевого окна. А все действия по перенаправлению сообщений выполняет сама Windows. Собственно можно выделить три вида передачи сообщений: посыл функцией PostMessage() - помещает сообщение в очередь сообщений потока, который создал целевое окно; посыл функцией SendMessage() -помещает сообщение сразу окнау минуя очередь потока (в MSDN указано, что она непосредственно вызывает оконную процедуру целевого окна) и сообщения, генерируемые Windows - они чаще всего тоже предварительно попадают в очередь потока.
И кстати сообщения в цикле обработки извлекаются из очереди функцией GetMessage() и ей подобными, а не DispatchMessage(), как вы указали.
Еще одна функция, которая почти всегда встречается в основном цикле обработки сообщений - TranslateMessage() - предназначена для преобразования сообщений от клавиатурного порта в сообщения о нажатии виртуалоьных клавиш(это упрощенно).
---------
WinApi - жутко неудобные костыли, MFC и VCL - немногим полезнее, но ничего лучше еще не создано (C)Почти Уинстон Черчилль :)
Ответ отправил: Tek (статус: 6-ой класс)
Ответ отправлен: 12.01.2007, 10:23


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

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

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

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

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


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


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
ООО "Мастер-Эксперт Про", Москва, 2007
Авторские права | Реклама на портале
Версия системы: 4.40 beta от 14.01.2007
Яндекс Rambler's Top100

В избранное