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

RusFAQ.ru: Win API


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

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

Выпуск № 319
от 11.10.2006, 08:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 372, Экспертов: 37
В номере:Вопросов: 2, Ответов: 4


Вопрос № 57780: Здравствуйте, уважаемые эксперты! Как можно сделать что-то вроде самораспоковывающегося архива? VC++ Приветствуются дельные советы и ссылки на полезные статьи. Спасибо....
Вопрос № 57862: Доброе время суток, как у вас говорят :-). Есть неболшая проблемка, я никогда не сталкивался с потоками. Расскажите плиз, как их создавать, использовать и убивать! Поток нажен, чтоб приниматть данные из СОМ-порта. А если у кого нить найдется ...

Вопрос № 57.780
Здравствуйте, уважаемые эксперты!
Как можно сделать что-то вроде самораспоковывающегося архива?
VC++
Приветствуются дельные советы и ссылки на полезные статьи.
Спасибо.
Отправлен: 05.10.2006, 10:21
Вопрос задал: Наумов Сергей Александрович / snov (статус: 1-ый класс)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Sergey A. Wedensky
Здравствуйте, Наумов Сергей Александрович / snov!

Не очень понятен вопрос.
Если Вас интересуют алгоритмы сжатия данных, можете посмотреть сдесь:
http://www.data-compress.net
Но причем тут WinAPI?

Или Вас интересует как хранить данные в исполняемом файле?
Можно в ресурсах - см. FindResourceEx(), LoadResource(), LockResource() и т.п.
Ответ отправил: Sergey A. Wedensky (статус: 4-ый класс)
Ответ отправлен: 05.10.2006, 10:33

Отвечает: dentist
Здравствуйте, Наумов Сергей Александрович / snov!
первое что приходит в голову, это дописывать данные в конце самого exe.
с ресурсами как предлагалось, ничего не выйдет (теоретически это возможно, но трудновыполнимо).
---------
"Software is like sex, it's better then it's free" (c) Linus Torvalds
Ответ отправил: dentist (статус: 5-ый класс)
Ответ отправлен: 05.10.2006, 11:01

Отвечает: Mihasic
Здравствуйте, Наумов Сергей Александрович / snov!

Существует множество архиваторов с исходниками (и не только архиваторов). Т.к. последнее время мне очень понравился алгоритм сжатия lzma, то предлагаю посмотреть на исходники 7-zip и nsis.
Или посмотреть на формат PE, скачать СДК по алгоритму сжатия (для LZMA - 7-zip.org) и далее думаю не так все сложно, суть:
Изначально создается файл, который в себе (в ресурсах) содержит архив и при запуске распаковывает его. Программа же, которая создает такую вещь - просто пишет в этот ресурс свой (созданный собой) архив и корректирует заголовок исполняемого файла (чтобы был правильный размер). Для данного случая неплохо, чтобы ресурс находился в конце программы.
Ответ отправил: Mihasic (статус: 8-ой класс)
Ответ отправлен: 05.10.2006, 15:51
Оценка за ответ: 5


Вопрос № 57.862
Доброе время суток, как у вас говорят :-).
Есть неболшая проблемка, я никогда не сталкивался с потоками. Расскажите плиз, как их создавать, использовать и убивать!
Поток нажен, чтоб приниматть данные из СОМ-порта. А если у кого нить найдется какой нить примерчик, ваще супер.
Вот моя почта gregor1980@yandex.ru
СПАСОБО!
Отправлен: 06.10.2006, 04:22
Вопрос задал: Gibson (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Sergey A. Wedensky
Здравствуйте, Gibson!

Для создания потока используется функция

HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes,
SIZE_T dwStackSize,
LPTHREAD_START_ROUTINE lpStartAddress,
LPVOID lpParameter,
DWORD dwCreationFlags,
LPDWORD lpThreadId
);

lpThreadAttributes отвечает за возможность наследования дескриптора
дочерними процессами и обычно NULL
dwStackSize - размер стека потока в байтах, если 0 по умолчанию 1Мб
lpStartAddress - адрес функции потока (см. ниже)
lpParameter - параметр, который будет передан в функцию потока (можете
передать указатель на свой класс или структуру, если нужно)
dwCreationFlags - если 0, поток запускается сразу, если
CREATE_SUSPENDED нужно вызвать ResumeThread()
lpThreadId - принимает идентификатор потока
Возвращает дескриптор потока

Функция потока выглядит так:

DWORD WINAPI ThreadProc(
LPVOID lpParameter
);

lpParameter - тот самый параметр, который Вы указали в CreateThread()

Если Вы хотите обрабатывать сообщения, в этой функци нужно создать
очередь типа while GetMessage()...
Посылать сообщения потоку можно при помощи PostThreadMessage();

Завершить поток внутри функции потока можно при помощи

VOID ExitThread(
DWORD dwExitCode
);

или просто выйдя из функции.

BOOL TerminateThread(
HANDLE hThread,
DWORD dwExitCode
);

завершает поток извне (из другого потока Вашего процесса).

Удачи!
Ответ отправил: Sergey A. Wedensky (статус: 4-ый класс)
Ответ отправлен: 06.10.2006, 10:27


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

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

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

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

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


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


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

В избранное