Вопрос № 57890: Здравствуйте уважаемые эксперты!
У меня такой вопрос.
Есть программы которые работают без установки и с установкой. Чем обусловлена такая разница. Как правило именно большие программы устанавливаются. Какие привелегии дает программисту именно...Вопрос № 57892: Здравстуйте господа эксперты! У меня такие вопросы:
1.Как в builder-е можно сделать, чтобы перетаскивать форму не только за заголовок, а удержывая мышью в любом месте на форме.
2. Как можно избваться от окна - то есть у меня на окне находять...Вопрос № 57894: Есть программа, работающая с COM-портом. Периодически (по таймеру) она :
1. Открывает порт
2. Производит обмен данными по COM-порту (запись - чтение)
3. Закрывает порт.
Как бы сделать так, чтобы две копии программы могли одновременно ...Вопрос № 57944: Здравствуйте, уважаемые эксперты. Вопрос следующий: есть указатель на блок памяти Buffer типа void*. В этом блоке уже содержатся некоторые данные, однако занята не вся память. Надо дописать в этот же блок что-то ещё, не затирая при этом старые данные...Вопрос № 57957: Здравствуйте уважаемые эксперты.
Считается, что С++ язык программирования для UNIX(а Линукс это Юникс подобная ОС). Вопрос в следующем - любая ли программа(win32 console application), написанная на С++ пойдет на Линуксе.
Заранее спасибо.
...Вопрос № 57986: Здравствуйте, Уважаемые.
Надо мне решить задачу: редактор mp3-тэгов.
Значит, всю информацию хочу сначала записать в структуру, сохранить там и выдать на экран. По заданию надо ещё добавить возможность изменять инфу о тэге, но это потом....
Вопрос № 57.890
Здравствуйте уважаемые эксперты!
У меня такой вопрос.
Есть программы которые работают без установки и с установкой. Чем обусловлена такая разница. Как правило именно большие программы устанавливаются. Какие привелегии дает программисту именно такой тип программ.
2. У меня есть программа - база данных о клиентах. Она представляет собой установочную версию. У меня возникла необходимость всегда иметь базу при себе, и я решил проверить работу программы просто скопировав ее папку на флешку. Все работает. Зачем тогда была нужна установочная версия?
Отправлен: 06.10.2006, 11:39
Вопрос задал: Valeraorg (статус: 3-ий класс)
Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 2)
Отвечает: dentist
Здравствуйте, Valeraorg1!
моё скромное имхо:
вопрос в удобстве и прихоти программиста.
для меня лично, установка ПО, это ни больше ни меньше, регистрация в системе.
а зачем мне нужна регистрация в системе? разве что для возможности глупым юзверем "корректного" удаления программы (лишь в том случае, если вы активно юзали реестр).
не судите строго, это всего лишь имхо ;)
--------- "Software is like sex, it's better then it's free" (c) Linus Torvalds
Ответ отправил: dentist (статус: 5-ый класс)
Ответ отправлен: 06.10.2006, 11:52 Оценка за ответ: 5 Комментарий оценки: Спасибо за мнение!
Если программа использует только стандартные динамические библиотеки или носит их с собой, то установка не обязательна. Кроме того, если используется реестр - программа может вносить настройки в него по мере надобности, в таком случае установка ей тоже не нужна.
Если же предусматривается копирование динамических библиотек в системные папки, прописывание настроек в реестре сразу, а не по мере необходимости, то программе нужен инсталлятор в том или ином виде (это может быть даже bat-файл).
Инсталлятор удобен с точки зрения пользователя - удобно устанавливать, удобно сносить, в любой момент можно легко узнать установлена программа или нет.
--------- Нет правил без исключений, правило без исключения - это исключение из правил.
Ответ отправил: NextStep / www2 (статус: Студент)
Ответ отправлен: 06.10.2006, 12:28 Оценка за ответ: 5 Комментарий оценки: Спасибо! за проффесиональный ответ
Отвечает: Иванов Игорь Михайлович
Здравствуйте, Valeraorg1!всё это для защиты от копирования
Ответ отправил: Иванов Игорь Михайлович (статус: 2-ой класс)
Ответ отправлен: 10.10.2006, 20:52 Оценка за ответ: 1 Комментарий оценки: И это в том числе. Но не только из-за этого. Ради этого в меньшей степени. Даже я это знаю.
Вопрос № 57.892
Здравстуйте господа эксперты! У меня такие вопросы:
1.Как в builder-е можно сделать, чтобы перетаскивать форму не только за заголовок, а удержывая мышью в любом месте на форме.
2. Как можно избваться от окна - то есть у меня на окне находяться предположим цифровые часы, а мне нужно чтобы они сущесвавали на экране сами по себе, без окна.
Заранее благодарен.
Отвечает: Sergey A. Wedensky
Здравствуйте, Goretsky Anton!
1) Таскать окно за любое место можно, например, так: см. приложение.
В идеале, хорошо бы еще обрабатывать WM_CAPTURECHANGED (другое окно перехватило мышь) и завершать при этом перетаскивание.
2) "Избавиться" от окна нельзя. Что-либо отображать Вы можете только на контексте окна (DC).
Есть варианты:
а) рисовать на DC рабочего стола. Не очень хорошо, т.к. он ведь и сам себя перерисовывает, да и придется стирать (принудительно его заставлять себя перерисовывать и т.д.)
б) Есть такая функция, SetWindowRgn(). Она позволяет сделать Ваше окно любой формы (в том числе и несвязной). Т.е. отображаться будут только те пикселы, который входят в установленный Вами регион, а остальные будут "прозрачными". Для Ваших целей это, наверное, лучший вариант. Создать произвольный регион из, например, bitmap'а, можно, поигравшись функциями CreateRectRgn() и CombineRgn() или же ExtCreateRegion(). Подробнее см. MSDN (или обращайтесь, если будут затруднения).
Удачи!
Приложение:
Ответ отправил: Sergey A. Wedensky (статус: 4-ый класс)
Ответ отправлен: 06.10.2006, 12:26 Оценка за ответ: 5 Комментарий оценки: Спасибо за помощь, то что нужно!
Вопрос № 57.894
Есть программа, работающая с COM-портом. Периодически (по таймеру) она :
1. Открывает порт
2. Производит обмен данными по COM-порту (запись - чтение)
3. Закрывает порт.
Как бы сделать так, чтобы две копии программы могли одновременно работать с одним портом?
Пытался сам разобраться с мьютексами - не получилось
Отправлен: 06.10.2006, 11:54
Вопрос задал: Алексей В. (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 2)
Отвечает: Sergey A. Wedensky
Здравствуйте, Алексей В.!
Два процесса открыть один порт конечно не могут, действительно нужно использовать механизмы синхронизации.
Использовать mutexы довольно легко:
В начале работы создаем mutex:
HANDLE _mutex = CreateMutex(0, FALSE, "некое имя");
Какой процесс первым вызовет, тот создаст, остальные откроют имеющийся.
Далее перед открытием порта вызываете
WaitForSingleObject(_mutex, INFINIT);
Эта функция не вернет управления потоку, пока _mutex не освободится, а тогда заберет его себе.
После закрытия порта вызываете
ReleaseMutex(_mutex);
Вот, вроде и все...
Ответ отправил: Sergey A. Wedensky (статус: 4-ый класс)
Ответ отправлен: 06.10.2006, 12:16
Вопрос № 57.944
Здравствуйте, уважаемые эксперты. Вопрос следующий: есть указатель на блок памяти Buffer типа void*. В этом блоке уже содержатся некоторые данные, однако занята не вся память. Надо дописать в этот же блок что-то ещё, не затирая при этом старые данные. Можно ли использовать в этом случае memcpy или CopyMemory? Если да, то что передавать в 1ом параметре?
Отправлен: 06.10.2006, 18:21
Вопрос задал: Mech@nic (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Melamed
Здравствуйте, Mech@nic!
Использовать функции memcpy или CopyMemory можно. В вашем случае в первом параметре должен передоваться
указатель на начало записи, то указателю должно прибавлятся смещение пер
74;ого байта, куда вы хотите копировать данные.
void *p;
...
memcpy((char*)p+offset_write ...);
Ответ отправил: Melamed (статус: 5-ый класс)
Ответ отправлен: 06.10.2006, 18:34 Оценка за ответ: 5 Комментарий оценки: Спасибо, вроде разобрался.
Вопрос № 57.957
Здравствуйте уважаемые эксперты.
Считается, что С++ язык программирования для UNIX(а Линукс это Юникс подобная ОС). Вопрос в следующем - любая ли программа(win32 console application), написанная на С++ пойдет на Линуксе.
Заранее спасибо.
С уважением, ENS.
Отвечает: n0name
Здравствуйте, ENS!
Нет далеко не любая.
Чтобы программа компилировалась в Linux нужно не использовать WinAPI, а использовать только стандартные библиотечные функции.
Вместо CreateFile, fopen, WriteFile -> fwrite, etc...
Ответ отправил: n0name (статус: 6-ой класс)
Ответ отправлен: 06.10.2006, 20:22
Отвечает: Morgion
Здравствуйте, ENS!
А на чём по Вашему Windows написан? На Java?
С++(С) - это универсальный язык. Реализации языка С есть начиная от микроконтроллеров (где
по суть нет ОС) кончая суперкомпьютерами.
Для того, что бы программа работала (точнее компилировалась и работала) под Windows и Unix, она не должна
использовать специфичные функции для какой-либо ОС. То есть она использу&
#1077;т ф-и, которые одинаково реализованы в разных ОС и неиспользует непортабельный код - то
всё будет работать . Да - она не обязательно должна быть консольной! Пример - библиотека QT. Вообще - можно много примеров найти.
Ответ отправил: Morgion (статус: Студент)
Ответ отправлен: 06.10.2006, 20:26
Отвечает: Алексеев В.В.
Здравствуйте, ENS!
Формально существует стандарт ANSI на языкы С/С++ который гарантирует, что код, написанный в соответствии со стандартом будет скомпилирован на любом компиляторе, соответствующем стандарту. На деле выходит иначе: 1) Функции начинающиеся с символа _ (Например _kbhit()) выпущены Microsoft, в стандарт не входят и на *nix системах естественно не скомпилируются
2) Одни и те же функции в разных ОС могут быть расположены в разных заголовках и иметь разные прототипы (функции по работе с сокетами в *nix лежат в хидере sys/socket.h а в Win: winsock.h
Поэтому чтобы сделать код переносимым приходиться писать множество макросов для условной компиляции и использовать только стандартные функции. Кроме того есть еще другие нюансы.
Ответ отправил: Алексеев В.В. (статус: 1-ый класс)
Ответ отправлен: 06.10.2006, 23:11
Отвечает: dentist
Здравствуйте, ENS!
1. никогда он таковым не считался! С++ кросплатформенный язык, т.е. программы на нём могут быть написаны для большинства известных ОС.
2. нет не любая. это зависит от того как она написана. если в коде, программистом, предусмотрена компиляция под различными ОС и различными компиляторами то да.
--------- "Software is like sex, it's better then it's free" (c) Linus Torvalds
Ответ отправил: dentist (статус: 5-ый класс)
Ответ отправлен: 09.10.2006, 09:14
Отвечает: Delph
Здравствуйте, ENS!
Теоретически стандард ANSI C/C++ предполагает переносимость программ с одной реализации языка на любую другую. Однако на практике это выполняется лишь для достаточно простых учебных программ, поскольку любое коммерческое приложение очень сильно опирается на функции операционной системы и весьма активно использует сильные стороны своего "родного" компилятора. В принципе можно написать программу, которая будет одинаково успешно компилироваться разными компиляторами и даже под разными ОС - но задача весьма
нетривиальная: придётся внести немало кода условной компиляции. К тому же нужно одинаково хорошо знать все версии компиляторов, под которые Вы хотите заточить свою программу.
Между прочим, весьма похожая ситуация сложилась и с SQL: вроде бы существует единый стандарт, но любая попытка оптимизации базы данных жёстко привязывает её к конкретному серверу.
Ответ отправил: Delph (статус: 2-ой класс)
Ответ отправлен: 09.10.2006, 09:18
Отвечает: Иванов Игорь Михайлович
Здравствуйте, ENS!спешу заметить что не только для Юникса и Линукса, нпример Windows написан полностью на С++, а что бы ваша программа работала на любой платформе включите компилятор Сlx,
Ответ отправил: Иванов Игорь Михайлович (статус: 2-ой класс)
Ответ отправлен: 10.10.2006, 20:33
Вопрос № 57.986
Здравствуйте, Уважаемые.
Надо мне решить задачу: редактор mp3-тэгов.
Значит, всю информацию хочу сначала записать в структуру, сохранить там и выдать на экран. По заданию надо ещё добавить возможность изменять инфу о тэге, но это потом.
Вот, собственно, вопросы:
1)Дебагер выдаёт ошибку, хотя вчера в институте всё в порядке было.
Посмотрите, пожалуйста, где ошибка.
2)Ваши советы-предложения.
Отвечает: Хватов Сергей
Здравствуйте, Евсеев В. Н.!
Ну, во-первых, если не предпринять дополнительных мер, компилятор выравнивает поля структур по границам слов (даже если они char[]). Я не знаю, так ли поступает ваш компилятор, но GNU C поступает именно так. Метод борьбы зависит от компилятора, но вероятно поможет директива #pragma pack(1) перед описанием структуры (и обязательно восстановите режим выравнивания после, а то может быть еще хуже :-) )
Во-вторых, id3-теги бывают двух совсем разных версий. Вы используете устаревшую и весьма ограниченную v1, да ещё и не проверяете есть ли эта запись вообще. Работать с v2 куда сложнее (а у нее еще и подверсии есть). Так что найдите какую-нибудь библиотеку для работы с тегами. Для linux есть taglib, возможно, что существует ее порт под windows
Ответ отправил: Хватов Сергей (статус: 6-ой класс)
Ответ отправлен: 08.10.2006, 13:51 Оценка за ответ: 5