<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Блог разработчика &#187; Программирование</title>
	<atom:link href="http://begemotov.net/creator/category/programming/feed/" rel="self" type="application/rss+xml" />
	<link>http://begemotov.net/creator</link>
	<description>Тюшков Николай aka Begemot о том, чем занимаюсь: шаровара, разработка, программирование, продвижение, заработок в интернете, жизнь</description>
	<lastBuildDate>Sun, 29 Jan 2012 20:33:09 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Поворачиваю к Qt</title>
		<link>http://begemotov.net/creator/programming/povorachivayu-k-qt/</link>
		<comments>http://begemotov.net/creator/programming/povorachivayu-k-qt/#comments</comments>
		<pubDate>Thu, 20 May 2010 09:07:07 +0000</pubDate>
		<dc:creator>Begemot</dc:creator>
				<category><![CDATA[Программирование]]></category>

		<guid isPermaLink="false">http://begemotov.net/creator/programming/povorachivayu-k-qt/</guid>
		<description><![CDATA[Язычники живут в своем аду. Я там чужой и дел их не веду. Но средство есть. (c) Жизнь удивительна и не предсказуема:) Пару лет уже пишу на wxWidgets мечтаю о том что когда-нибудь у меня все-таки дойдут руки до портирования своих утилит на unix\Mac OS. В свое время выбрал wxWidgets вместо Qt, так как Qt [...]]]></description>
			<content:encoded><![CDATA[<p align="right">Язычники живут в своем аду.    <br />Я там чужой и дел их не веду.     <br />Но средство есть. (c)</p>
<p align="left">Жизнь удивительна и не предсказуема:) Пару лет уже пишу на wxWidgets мечтаю о том что когда-нибудь у меня все-таки дойдут руки до портирования своих утилит на unix\Mac OS. В свое время выбрал <a href="http://begemotov.net/wxwidgets/common/wxwidgets-vs-qt/" target="_blank">wxWidgets вместо Qt</a>, так как Qt на тот момент была еще слишком дорога и из-за ряда преимуществ wxWidgets конкретно для моих проектов.     </p>
<p align="left">Месяц назад начал писать новый проект, не мой, на заказ. Задание – переписать существующее приложение, кроссплатформенно с тем что бы добиться поддержки 64х битных систем (сейчас есть проблемы, спасибо MS:) и захватить рынок MacOS пользователей, которые неоднократно выражали желание купить эту программу.</p>
<p align="left">Начал писать как специалист по wxWidgets, написал прототип – уперся в некоторые проблемы, не то что бы совсем не решаемые, но все-таки… В общем <a href="http://begemotov.net/wxwidgets/using/beg-po-minnomu-polyu-k-qt/" target="_blank">так сложились обстоятельства</a> что сейчас я резко осваиваю Qt, и похоже мой первый реальный кроссплатформенный проект будет именно на нем, забавно правда? <img src='http://begemotov.net/creator/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p align="left">За полторы недели изучения библиотеки, сложилось мнение что штука эта вполне приятная, в плане вылизаности и наполненности – писать на ней можно легко и быстро – хотя пока это мнение в основном благодаря статьям и книге, в реальном использовании делаю только первые шаги. Разочарование тоже есть, но об этом позже, когда будет реальный опыт.</p>
<hr />
<p><small>© Begemot для <a href="http://begemotov.net/creator">Блог разработчика</a>, 2010. |
<a href="http://begemotov.net/creator/programming/povorachivayu-k-qt/">Ссылка</a> |
<a href="http://begemotov.net/creator/programming/povorachivayu-k-qt/#comments">Уже дискуссия (5)</a>
<br/>
По теме: <br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://begemotov.net/creator/programming/povorachivayu-k-qt/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>TidyForums &#8211; про питон, форумы, модеров и хрень</title>
		<link>http://begemotov.net/creator/programming/tidyforums-pro-piton-forumyi-moderov-i-hren/</link>
		<comments>http://begemotov.net/creator/programming/tidyforums-pro-piton-forumyi-moderov-i-hren/#comments</comments>
		<pubDate>Tue, 20 Apr 2010 18:48:30 +0000</pubDate>
		<dc:creator>Begemot</dc:creator>
				<category><![CDATA[Программирование]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[TidyForums]]></category>

		<guid isPermaLink="false">http://begemotov.net/creator/programming/tidyforums-pro-piton-forumyi-moderov-i-hren/</guid>
		<description><![CDATA[В связи с переездом в Севастополь зарегистрировался и начал общаться на Севастопольском городском форуме – типа надо быть в курсе событий места где живешь:) В процессе встретилось одно неудобство – беглое слежение за форумом отбирает слишком много времени. Подумалось что могу это исправить небольшим скриптом, заодно и попробую питон на “реальной” задаче. Питон попробовал – [...]]]></description>
			<content:encoded><![CDATA[<p>В связи с переездом в Севастополь зарегистрировался и начал общаться на Севастопольском городском форуме – типа надо быть в курсе событий места где живешь:) В процессе встретилось одно неудобство – беглое слежение за форумом отбирает слишком много времени. Подумалось что могу это исправить небольшим скриптом, заодно и попробую питон на “реальной” задаче.</p>
<p>Питон попробовал – мне по прежнему нравится:) Писать\тестировать\осваивать язык – легко. Ехешники делать можно – они даже работают, хотя конечно вес и размер занимаемой памяти соответствующий, вопрос насчет того насколько доступны исходники после компиляции в exe для меня остается открытым.</p>
<p>Интересно будет попробовать собрать это для мака или линукса, по идее скрипт достаточно просто и проблем быть не будет – но надо пробовать.</p>
<p>На форуме меня сразу же забанили, после того как написал про скрипт, так что путевки в жизнь программа не получила:) Вообще конечно админы меня удивили, интересно в чем причина такой …эээ неадкватности, ну да ладно. Пока еще не решил обидеться и послать все в *** или все-таки зарегаться под новым ником и начать жизнь с нуля <img src='http://begemotov.net/creator/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Пока решил сделать страницу для программы у себя, мало ли может кому из хороших людей пригодится. Кстати если кому интересны как выглядят питоновские ехешники, тоже можно глянуть (весьма аккуратно оказываются выглядят, при соответствующих опциях)</p>
<p><a href="http://begemotov.net/creator/tidy-forums-read-forums-easy/" target="_blank">Tidy Forums – оптимизируем процесс чтения форума</a></p>
<hr />
<p><small>© Begemot для <a href="http://begemotov.net/creator">Блог разработчика</a>, 2010. |
<a href="http://begemotov.net/creator/programming/tidyforums-pro-piton-forumyi-moderov-i-hren/">Ссылка</a> |
<a href="http://begemotov.net/creator/programming/tidyforums-pro-piton-forumyi-moderov-i-hren/#comments">Уже дискуссия (11)</a>
<br/>
По теме: <a href="http://begemotov.net/creator/tag/python/" rel="tag">Python</a>, <a href="http://begemotov.net/creator/tag/tidyforums/" rel="tag">TidyForums</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://begemotov.net/creator/programming/tidyforums-pro-piton-forumyi-moderov-i-hren/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>С++ Получение списка процессов и путей к exe файлам</title>
		<link>http://begemotov.net/creator/programming/s-poluchenie-spiska-protsessov-i-putey-k-exe-faylam/</link>
		<comments>http://begemotov.net/creator/programming/s-poluchenie-spiska-protsessov-i-putey-k-exe-faylam/#comments</comments>
		<pubDate>Tue, 23 Mar 2010 19:31:06 +0000</pubDate>
		<dc:creator>Begemot</dc:creator>
				<category><![CDATA[Программирование]]></category>
		<category><![CDATA[c++]]></category>

		<guid isPermaLink="false">http://begemotov.net/creator/?p=760</guid>
		<description><![CDATA[Вот неожиданно понадобилось получить список из всех запущенных exe файлов. Xотя казалось бы зачем оно такое может быть надо в simple end-user utility for storing clipboard history, но оказалось что надо. Пришлось изобретать велосипед, что бы труды не пропадали – решил опубликовать. Вкратце получаем снимок всех процессов в системе CreateToolhelp32Snapshot, итерируясь по нему, для каждого [...]]]></description>
			<content:encoded><![CDATA[<p>Вот неожиданно понадобилось получить список из всех запущенных exe файлов. Xотя казалось бы зачем оно такое может быть надо в simple end-user <a href="http://clipdiary.com/">utility for storing clipboard history</a>, но оказалось что надо. Пришлось изобретать велосипед, что бы труды не пропадали – решил опубликовать.</p>
<p>Вкратце получаем снимок всех процессов в системе CreateToolhelp32Snapshot, итерируясь по нему, для каждого процесса делаем снимок его модулей и получаем полный путь к ехе файлу. Если полный путь не нужен, а достаточно только имени файла – то вторую часть делать не нужно.</p>
<p>Теперь просто код, он простой, написан для универсальности с использованием stl.</p>
<div class="codecolorer-container cpp default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><div class="cpp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #0000ff;">typedef</span> &nbsp;map<span style="color: #000080;">&lt;</span>wstring, wstring<span style="color: #000080;">&gt;</span> ProcessMappingType<span style="color: #008080;">;</span><br />
<br />
wstring GetFullPathForProcess<span style="color: #008000;">&#40;</span>DWORD pid<span style="color: #008000;">&#41;</span><br />
<span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #666666;">// Take a snapshot of all modules in the specified process.</span><br />
&nbsp; &nbsp; HANDLE hModuleSnap <span style="color: #000080;">=</span> <span style="color: #0000ff;">NULL</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; hModuleSnap <span style="color: #000080;">=</span> <span style="color: #008080;">::</span><span style="color: #007788;">CreateToolhelp32Snapshot</span><span style="color: #008000;">&#40;</span>TH32CS_SNAPMODULE, pid<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>hModuleSnap <span style="color: #000080;">==</span> INVALID_HANDLE_VALUE<span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">return</span> _T<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
<br />
&nbsp; &nbsp; MODULEENTRY32 me32 <span style="color: #000080;">=</span> <span style="color: #008000;">&#123;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; me32.<span style="color: #007788;">dwSize</span> <span style="color: #000080;">=</span> <span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span>MODULEENTRY32<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span><span style="color: #008080;">::</span><span style="color: #007788;">Module32First</span><span style="color: #008000;">&#40;</span>hModuleSnap, <span style="color: #000040;">&amp;</span>me32<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#123;</span> &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008080;">::</span><span style="color: #007788;">CloseHandle</span><span style="color: #008000;">&#40;</span>hModuleSnap<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">return</span> _T<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #008080;">::</span><span style="color: #007788;">CloseHandle</span><span style="color: #008000;">&#40;</span>hModuleSnap<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">return</span> wstring<span style="color: #008000;">&#40;</span>me32.<span style="color: #007788;">szExePath</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
<span style="color: #008000;">&#125;</span><br />
<br />
ProcessMappingType GetAllRunningApplication<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><br />
<span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; ProcessMappingType m<span style="color: #008080;">;</span><br />
<br />
&nbsp; &nbsp; HANDLE hSnap <span style="color: #000080;">=</span> CreateToolhelp32Snapshot<span style="color: #008000;">&#40;</span>TH32CS_SNAPPROCESS, <span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>hSnap <span style="color: #000040;">!</span><span style="color: #000080;">=</span> INVALID_HANDLE_VALUE<span style="color: #008000;">&#41;</span> <br />
&nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; PROCESSENTRY32 proc<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; proc.<span style="color: #007788;">dwSize</span> <span style="color: #000080;">=</span> <span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span>PROCESSENTRY32<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>Process32First<span style="color: #008000;">&#40;</span>hSnap, <span style="color: #000040;">&amp;</span>proc<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; m<span style="color: #008000;">&#91;</span>proc.<span style="color: #007788;">szExeFile</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> GetFullPathForProcess<span style="color: #008000;">&#40;</span>proc.<span style="color: #007788;">th32ProcessID</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>Process32Next<span style="color: #008000;">&#40;</span>hSnap, <span style="color: #000040;">&amp;</span>proc<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; m<span style="color: #008000;">&#91;</span>proc.<span style="color: #007788;">szExeFile</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> GetFullPathForProcess<span style="color: #008000;">&#40;</span>proc.<span style="color: #007788;">th32ProcessID</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">else</span> wxFAIL_MSG<span style="color: #008000;">&#40;</span>wxString<span style="color: #008080;">::</span><span style="color: #007788;">Format</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;Error Process32First: %i&quot;</span>, GetLastError<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008080;">::</span><span style="color: #007788;">CloseHandle</span><span style="color: #008000;">&#40;</span>hSnap<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">else</span> &nbsp;wxFAIL_MSG<span style="color: #008000;">&#40;</span>wxString<span style="color: #008080;">::</span><span style="color: #007788;">Format</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;Error Load ToolHelp: &nbsp;%i&quot;</span>, GetLastError<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> &nbsp;<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #0000ff;">return</span> m<span style="color: #008080;">;</span><br />
<span style="color: #008000;">&#125;</span></div></div>
<p>Все, с вас конфетка <img src='http://begemotov.net/creator/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>P.S. И еще, хорошие люди просили сослаться на <a href="http://egorka.com.ua/auction/6" target="_blank">скандинавский аукцион</a> в Киеве, дык мне не трудно <img src='http://begemotov.net/creator/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  А вы верите в подобное?</p>
<hr />
<p><small>© Begemot для <a href="http://begemotov.net/creator">Блог разработчика</a>, 2010. |
<a href="http://begemotov.net/creator/programming/s-poluchenie-spiska-protsessov-i-putey-k-exe-faylam/">Ссылка</a> |
<a href="http://begemotov.net/creator/programming/s-poluchenie-spiska-protsessov-i-putey-k-exe-faylam/#comments">Уже дискуссия (11)</a>
<br/>
По теме: <a href="http://begemotov.net/creator/tag/c/" rel="tag">c++</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://begemotov.net/creator/programming/s-poluchenie-spiska-protsessov-i-putey-k-exe-faylam/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>CMake, mingw, codeblocks &#8211; level up</title>
		<link>http://begemotov.net/creator/programming/cmake-mingw-codeblocks-level-up/</link>
		<comments>http://begemotov.net/creator/programming/cmake-mingw-codeblocks-level-up/#comments</comments>
		<pubDate>Sun, 07 Mar 2010 19:02:23 +0000</pubDate>
		<dc:creator>Begemot</dc:creator>
				<category><![CDATA[Программирование]]></category>
		<category><![CDATA[линукс]]></category>

		<guid isPermaLink="false">http://begemotov.net/creator/programming/cmake-mingw-codeblocks-level-up/</guid>
		<description><![CDATA[И опыт,&#160;сын ошибок трудных…(c) Напряженная выдалась неделька. Решил все-таки потихоньку приближаться к давней мечте, к портированию на линукс\макос. Начать решил с освоения CMake’а – кроссплатформенной системы автоматизации сборки. Штука, по идее, архиполезная если разработка ведется более чем одним разработчиком\на более чем одном компе или системе. Написал Cmak’овский проект научился генерировать солюшен для студии, make файл [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p align="right"><span style="widows: 2; text-transform: none; text-indent: 0px; border-collapse: separate; font: small arial, sans-serif; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class="Apple-style-span"><em style="font-style: normal; font-weight: bold">И опыт</em>,<span class="Apple-converted-space">&#160;</span><em style="font-style: normal; font-weight: bold">сын ошибок трудных…(c)</em><wbr></wbr></wbr></wbr></wbr></span></p>
</blockquote>
<p>Напряженная выдалась неделька. Решил все-таки потихоньку приближаться к давней мечте, к портированию на линукс\макос. </p>
<p>Начать решил с освоения CMake’а – кроссплатформенной системы автоматизации сборки. Штука, по идее, архиполезная если разработка ведется более чем одним разработчиком\на более чем одном компе или системе. Написал Cmak’овский проект научился генерировать солюшен для студии, make файл для mibgw и (почти) проект для CodeBlock’sa.</p>
<p>Еще меня убедили, что перед тем как суваться с кодом в линукс – целесообразно добиться компиляции под виндой на mingw (это порт gcc под винду – если кто не знает) – легче будет править ошибки. Я решил, что это не лишено здравого смысла. Поставил minwg и кодеблокс, и заставил собиратся на все этому тестовые примеры. Спасибо одному хорошему человеку с этим с этим справился довольно быстро.</p>
<p>В процессе всего этого, пришел к выводу что наверное было дешевле заплатить кому-нибудь разбирающемуся в CMake за подходящий мне скрипт и обучение, потому что самому реально долго. Ну или хотя бы не бросаться так с места в карьер, а просто потихоньку искать примеры реальных скриптов – по другому вышло долго.</p>
<p>В общем пять дней прошло в поисках пути через тернии, но зато я стал ближе к идеалу, и можно поставить пару лишних галочек в резюме, при случае:) </p>
<p>В планах заставить программы собираться на wingw, освоение cmake под линуксом и потом в конце коммунизм:)</p>
<hr />
<p><small>© Begemot для <a href="http://begemotov.net/creator">Блог разработчика</a>, 2010. |
<a href="http://begemotov.net/creator/programming/cmake-mingw-codeblocks-level-up/">Ссылка</a> |
<a href="http://begemotov.net/creator/programming/cmake-mingw-codeblocks-level-up/#comments">Уже дискуссия (8)</a>
<br/>
По теме: <a href="http://begemotov.net/creator/tag/linuks/" rel="tag">линукс</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://begemotov.net/creator/programming/cmake-mingw-codeblocks-level-up/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Учимся проектировать архитектуру как Microsoft</title>
		<link>http://begemotov.net/creator/programming/uchimsya-proektirovat-arhitekturu-kak-microsoft/</link>
		<comments>http://begemotov.net/creator/programming/uchimsya-proektirovat-arhitekturu-kak-microsoft/#comments</comments>
		<pubDate>Fri, 19 Feb 2010 10:24:25 +0000</pubDate>
		<dc:creator>Begemot</dc:creator>
				<category><![CDATA[Программирование]]></category>
		<category><![CDATA[ссылки]]></category>

		<guid isPermaLink="false">http://begemotov.net/creator/programming/uchimsya-proektirovat-arhitekturu-kak-microsoft/</guid>
		<description><![CDATA[MS устроил бесплатную раздачу слонов - «Руководство Microsoft по проектированию архитектуры приложений, 2-е издание» на русском языке. Как утверждают, книга содержит собственные методики компании Microsoft, собранные на основе многолетней успешной работы над продуктами Microsoft и общения с заказчиками. И это все должно быть “интересно и полезно не только архитекторам, но и разработчикам”. Раздают бесплатно, но [...]]]></description>
			<content:encoded><![CDATA[<p>MS устроил <a href="http://apparchguide.ms/" target="_blank">бесплатную раздачу слонов</a> - «Руководство Microsoft по проектированию архитектуры приложений, 2-е издание» на русском языке.</p>
<p>Как утверждают, книга содержит собственные методики компании Microsoft, собранные на основе многолетней успешной работы над продуктами Microsoft и общения с заказчиками. И это все должно быть “интересно и полезно не только архитекторам, но и разработчикам”.</p>
<p>Раздают бесплатно, но надо зарегистрироваться.  Если вдруг кто попробует, напишите пожалуйста, стоит ли читать, а то что-то мне сейчас так все лениво… <img src='http://begemotov.net/creator/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>P.S.  <a href="http://www.testlab2.com/" target="_blank">Software Testing Service</a> – обязательно тестируйте ваши приложения, так как даже использования всей мощи MS при проектировании архитектуры, не гарантирует отсутствие ошибок:)</p>
<p><strong>Updated</strong>:  еще сегодня попалось - <a href="http://swebok.sorlik.ru/" target="_blank">Основы Программной Инженерии</a>, прямо как-то инженерный день <img src='http://begemotov.net/creator/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<hr />
<p><small>© Begemot для <a href="http://begemotov.net/creator">Блог разработчика</a>, 2010. |
<a href="http://begemotov.net/creator/programming/uchimsya-proektirovat-arhitekturu-kak-microsoft/">Ссылка</a> |
<a href="http://begemotov.net/creator/programming/uchimsya-proektirovat-arhitekturu-kak-microsoft/#comments">Уже дискуссия (2)</a>
<br/>
По теме: <a href="http://begemotov.net/creator/tag/ssyilki/" rel="tag">ссылки</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://begemotov.net/creator/programming/uchimsya-proektirovat-arhitekturu-kak-microsoft/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Почему я стал программировать на wxWidgets</title>
		<link>http://begemotov.net/creator/programming/pochemu-ya-stal-programmirovat-na-wxwidgets-2/</link>
		<comments>http://begemotov.net/creator/programming/pochemu-ya-stal-programmirovat-na-wxwidgets-2/#comments</comments>
		<pubDate>Mon, 23 Nov 2009 19:56:02 +0000</pubDate>
		<dc:creator>Begemot</dc:creator>
				<category><![CDATA[Программирование]]></category>
		<category><![CDATA[wxWidgets]]></category>

		<guid isPermaLink="false">http://begemotov.net/creator/programming/pochemu-ya-stal-programmirovat-na-wxwidgets-2/</guid>
		<description><![CDATA[Уже не первый раз задают этот вопрос, решил написать развернутый ответ, возможно в немного вольном стиле, вечер, после релиза, однако. Выбор это я сделал 2 с копейками года назад. Почему именно wxWidgets? Знаете какой был самый распространенный ответ в нашем вузе на вопрос “а как ты попал в ХАИ?” - “Случайно”:) Вот почти так же [...]]]></description>
			<content:encoded><![CDATA[<p>Уже не первый раз задают этот вопрос, решил написать развернутый ответ, возможно в немного вольном стиле, вечер, после релиза, однако.</p>
<p>Выбор это я сделал 2 с копейками года назад. Почему именно <a href="http://begemotov.net/wxwidgets/" target="_blank">wxWidgets</a>? Знаете какой был самый распространенный ответ в нашем вузе на вопрос “а как ты попал в ХАИ?” - “Случайно”:) Вот почти так же и я выбрал wxWidgets.</p>
<p>Тогда я писал на MFC и уже давно, <span style="text-decoration: line-through;">сношений</span> опыта с другими фреймворками не имел. Все вокруг говорили что MFC, или уже умер или умрет буквально сегодня-завтра. Вот и побудило меня это задуматься, на тему поиска новых библиотек. К тому же на мфц я писал уже давно и долго, руки чесались - хотелось чего-то новенького. Плюс к тому времени произошел, первый скачек перехода от количественных изменений к качественным в моей карьере, я еще не совсем понимая что есть хороший код, уже понимал, что все что я писал до этого это  - ужас, и легче переписать проекты с нуля чем довести их до ума. В общем нужен был новый толчок и  я решил поискать на чем бы их переписать.</p>
<ul>
<li>WINAPI – я сразу отбросил ввиду низкоуровневости. Я на нем не писал, но слышал много страшилок.</li>
<li>ATL\WTL – вроде как идеально подходил для моего класса утилит, и я думал его попробовать, хотя и смущала низкоуровневость, но руки не дошли.</li>
<li>MFC – уже был пройденный этап</li>
<li>QT – его все хвалили, но лицензия… <a href="http://begemotov.net/wxwidgets/ne-wxwidgets/qt-lgpl/" target="_blank">это потом он стал бесплатным</a>, а тогда стоил более чем приличных денег. Сейчас уже можно использовать почти свободно, но все равно остаются проблемы с ненативностью, скоростью и размером, в общем <a href="http://begemotov.net/wxwidgets/common/wxwidgets-vs-qt/" target="_blank">для моих продуктов не подходит</a>.</li>
<li>HTMLLayout – наверное весьма приятная и перспективная штука, по крайней мере многие хвалят. Но css для меня темный лес и даже хуже, писать _красивые_ интерфейсы на хтмл я тоже с роду не умел, даже не стал смотреть.</li>
<li>Delphi – хоть  его все и хвалили, в свете применимости для шаровары, в качестве средства для быстрого написания быстрых шароварок, но ведь это не наш путь, правда?:) Есть у меня один <a href="http://vteacher.net/" target="_blank">проект на дельфи</a>, в общем, я его не выбрал.</li>
<li>Python – мне всегда заочно нравился и нравится сейчас, я даже опять вернулся к идее его использовать, буквально вчера скачал и установил, буду пробовать. Но опять же для моего класса продуктов он <a href="http://begemotov.net/creator/programming/ozarenie-ili-piton-mat-ego/" target="_blank">не подходит</a>.</li>
<li>Java – всегда мне заочно не нравилась. Заочно, потому что я на ней никогда не писал и её не знаю, но вот не нравится, и все тут.</li>
<li>NET – для меня, в принципе тоже самое что и джава. Как по мне так тормоз тормозом, а мне надо было что-то быстрое…</li>
</ul>
<p>Ну вот оставалась еще wxWidgets, подкупала нативность, скорость, похожесть на мфц, легкое переобучение, ну и новизна, ее мало кто использовал и в этом был положительный момент, подогревающий интерес. Ну и конечно большой плюс кроссплатформенность.  Кроссплатформенность так до сих пор и осталась мифическим преимуществом, поскольку пока за пределы винды я не перешагнул. Но теоретически могу в любой момент – и это приятно согревает душу <img src='http://begemotov.net/creator/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Надеюсь скоро все-таки начну портировать продукты на другие платформы, я уже почти вплотную подошел к этому.</p>
<p>Я скачал, попробовал, получилось, понравилось. В принципе, это почти тоже MFC, только с потенциальной кроссплатформеностью, к тому же открытое – это иногда помогает. Хотя мфц все-таки более вылизанная, меньше глюков.</p>
<p>Что в итоге? У меня есть несколько продуктов написанных на wxWidgets <a href="http://clipdiary.com/" target="_blank">clipboar manager</a>, <a href="http://softvoile.com/flashnote/" target="_blank">quick notes</a>, <a href="http://blogovodstvo.com/" target="_blank">blogspreading</a>. И несмотря на то что есть определенные <a href="http://begemotov.net/wxwidgets/tag/nedovolstva/" target="_blank">недовольства wxWidgets</a>, я все-таки доволен. В принципе, считаю что даже если отбросить кроссплатформенность и писать только под винду, то все равно достойный выбор – работать можно. Как говорит мой друг, <a href="http://wxwidgets.info/" target="_blank">миссионер wxWidgets</a> “на вкус и цвет, фломастеры разные” кому-то нравится мфц, кому-то вх, <a href="http://www.qualibyte.com/" target="_blank">кто-то</a> вообще полностью все пишет свое с нуля (зачем спрашивается?),  а кто-то и на php программит и доволен, прости господи <img src='http://begemotov.net/creator/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<hr />
<p><small>© Begemot для <a href="http://begemotov.net/creator">Блог разработчика</a>, 2009. |
<a href="http://begemotov.net/creator/programming/pochemu-ya-stal-programmirovat-na-wxwidgets-2/">Ссылка</a> |
<a href="http://begemotov.net/creator/programming/pochemu-ya-stal-programmirovat-na-wxwidgets-2/#comments">Уже дискуссия (42)</a>
<br/>
По теме: <a href="http://begemotov.net/creator/tag/wxwidgets/" rel="tag">wxWidgets</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://begemotov.net/creator/programming/pochemu-ya-stal-programmirovat-na-wxwidgets-2/feed/</wfw:commentRss>
		<slash:comments>42</slash:comments>
		</item>
		<item>
		<title>И снова про иконки</title>
		<link>http://begemotov.net/creator/programming/i-snova-pro-ikonki/</link>
		<comments>http://begemotov.net/creator/programming/i-snova-pro-ikonki/#comments</comments>
		<pubDate>Sat, 21 Nov 2009 20:32:44 +0000</pubDate>
		<dc:creator>Begemot</dc:creator>
				<category><![CDATA[Программирование]]></category>
		<category><![CDATA[Шаровароварение]]></category>
		<category><![CDATA[опыт]]></category>

		<guid isPermaLink="false">http://begemotov.net/creator/programming/i-snova-pro-ikonki/</guid>
		<description><![CDATA[На этот раз правда, не про бесплатные наборы иконок, а про правильное их использование в программе. Заказал у дизайн главной иконки иконки у фрилансера,&#160; $40, мне понравилось - я доволен, результат тут, спасибо маньяку за наводку. В процессе интеграции выяснил что, код который генерирует визард студии для работы с иконками – неправильный, и все эти [...]]]></description>
			<content:encoded><![CDATA[<p>На этот раз правда, не <a href="http://begemotov.net/creator/shareware/free-icons-set-for-programm/" target="_blank">про бесплатные наборы иконок</a>, а про правильное их использование в программе. </p>
<p>Заказал у дизайн <a href="http://icontown.ru/" target="_blank">главной иконки иконки у фрилансера</a>,&#160; $40, мне понравилось - я доволен, результат <a href="http://flashpaste.com/" target="_blank">тут</a>, спасибо <a href="http://slabo.blogspot.com/" target="_blank">маньяку</a> за наводку. В процессе интеграции выяснил что, код который генерирует визард студии для работы с иконками – неправильный, и все эти годы у меня криво отображалась главная иконка. Раньше она и сама была кривая, так что на это внимание не обращал,&#160; а теперь стало явно видно. Что генерирует визард</p>
<blockquote><p>m_hIcon = AfxGetApp()-&gt;LoadIcon(IDR_MAINFRAME);</p>
<p>…</p>
<p>SetIcon(m_hIcon, TRUE); // Set big icon      <br />SetIcon(m_hIcon, FALSE); // Set small icon       </p>
</blockquote>
<p>Проблема в том что LoadIcon грузит иконку весьма паршиво. И гораздо лучше использовать LoadImage, вот так</p>
<blockquote><p>SetIcon(HICON(LoadImage(AfxGetApp()-&gt;m_hInstance, MAKEINTRESOURCE(IDR_MAINFRAME), IMAGE_ICON, 32, 32, 0)), TRUE); // Set big icon      <br />SetIcon(HICON(LoadImage(AfxGetApp()-&gt;m_hInstance, MAKEINTRESOURCE(IDR_MAINFRAME), IMAGE_ICON, 16, 16, 0)), FALSE); // Set small icon</p>
</blockquote>
<p>Теперь и маленькая (таскбар, заголовок окна) и большая (алт-таб) иконка загрузятся корректно.</p>
<p>Но и это еще не все тонкости, грузить иконку для использования в трее надо так как написано выше, это понятно. Но если вы хотите корректно отображать иконку в трее для Windows 2000 – то необходимо делать две ветви кода, и для W2K грузить иконку с опцией LR_VGACOLOR</p>
<blockquote><p>HICON(LoadImage(AfxGetApp()-&gt;m_hInstance, MAKEINTRESOURCE(IDR_MAINFRAME), IMAGE_ICON, 16, 16, LR_VGACOLOR)</p>
</blockquote>
<p>2000 винда умеет отображать в трее только 16 цветную иконку (ужас!), это нужно учесть и иметь формат с 4х битным цветом в вашем ico файле.</p>
<p>В общем намаялся я с этими иконками по полной программе, особенно учитывая, что я решил пользуясь случаем массово сменить иконки в меню\на тулбаре – потому что там тоже был ужас. Часть иконок заменил, часть взял старые но <strong>правильно </strong>их обработал, в результате программа стала смотреться намного приятнее, как по мне. А ведь страшно подумать, много лет продавалась с кривыми иконками, только потому что я 5 лет назад неумел\поленился разбираться с цветностью, форматами етс, а потом привык и как-то не замечал.</p>
<p>Отсюда мораль, если вы уже давно разрабатываете продукт – попробуйте абстрагироваться и посмотреть на него свежим взглядом… </p>
<p>За помощь и посвящения в тайны иконок, благодарю эксперта в этом вопросе&#160; и по совместительству автора <a href="http://www.qualibyte.com/pixelformer/" target="_blank">приятной программы для работы с иконками</a>.</p>
<p>Кстати, тут сегодня <a href="http://www.alconost.com/" target="_blank">Агентство переводов Alconost Translations</a> выложило в открытый доступ <a href="http://blog.alconost.com/sales_prospect_email_templates" target="_blank">Follow-up templates (шаблоны писем потенциальным клиентам)</a>, можно брать, пользоваться и даже добавлять свой любимый <a href="http://flashpaste.com/download.php" target="_blank">text repository for instant inserting</a> <img src='http://begemotov.net/creator/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<hr />
<p><small>© Begemot для <a href="http://begemotov.net/creator">Блог разработчика</a>, 2009. |
<a href="http://begemotov.net/creator/programming/i-snova-pro-ikonki/">Ссылка</a> |
<a href="http://begemotov.net/creator/programming/i-snova-pro-ikonki/#comments">Уже дискуссия (19)</a>
<br/>
По теме: <a href="http://begemotov.net/creator/tag/opyit/" rel="tag">опыт</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://begemotov.net/creator/programming/i-snova-pro-ikonki/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>Ручная загрузка функций из DLL или как в программе использовать функции из Vista API</title>
		<link>http://begemotov.net/creator/programming/ruchnaya-zagruzka-funktsiy-iz-dll-ili-kak-v-programme-ispolzovat-funktsii-iz-vista-api/</link>
		<comments>http://begemotov.net/creator/programming/ruchnaya-zagruzka-funktsiy-iz-dll-ili-kak-v-programme-ispolzovat-funktsii-iz-vista-api/#comments</comments>
		<pubDate>Mon, 26 Oct 2009 06:21:52 +0000</pubDate>
		<dc:creator>Begemot</dc:creator>
				<category><![CDATA[Программирование]]></category>
		<category><![CDATA[c++]]></category>

		<guid isPermaLink="false">http://begemotov.net/creator/?p=673</guid>
		<description><![CDATA[Наконец и до меня дошел прогресс и я все-таки решил перейти на Vista Clipboard API в своем Clipboard Manager. Логику продумал, код написал, код что-то наподобие : if &#40;vista&#41; CallNewVistaAPI&#40;&#41;; else UseOldAPI&#40;&#41;; Запускаю в дебаге под XP, программа выдает ошибку и закрывается: Clipdiary.exe - Entry Point Not Found --------------------------- The procedure entry point AddClipboardFormatListener could [...]]]></description>
			<content:encoded><![CDATA[<p>Наконец и до меня дошел прогресс и я все-таки решил перейти на Vista Clipboard API в своем <a href="http://clipdiary.com/" target="_blank">Clipboard Manager</a>. Логику продумал, код написал, код что-то наподобие :</p>
<div class="codecolorer-container cpp default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="cpp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>vista<span style="color: #008000;">&#41;</span><br />
CallNewVistaAPI<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
<span style="color: #0000ff;">else</span><br />
UseOldAPI<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></div></div>
<p>Запускаю в дебаге под XP, программа выдает ошибку и закрывается:</p>
<blockquote><p>Clipdiary.exe - Entry Point Not Found<br />
---------------------------<br />
The procedure entry point AddClipboardFormatListener could not be located in the dynamic link library USER32.dll.</p></blockquote>
<p>То есть даже в случае когда код не пытается вызвать новую функцию, программа все равно не запускается, плохо. Гугл мне почему-то не чем не помог, зато помогли добрые люди. Решение – не вызывать напрямую функции api появившиеся только в висте, а тихонько вручную подгружать их из USER32.dll, запоминать адреса и использовать через указатели. Мне собственно дали готовый класс для всего этого, который я переписал под свои нужды и свой стиль, и теперь могу поделиться:)</p>
<p>Заголовочный файл:</p>
<div class="codecolorer-container cpp default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><div class="cpp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #339900;">#pragma once</span><br />
<br />
<span style="color: #339900;">#pragma pack (push, 8)</span><br />
<br />
<span style="color: #0000ff;">class</span> CDLLFunctionImports<br />
<span style="color: #008000;">&#123;</span><br />
<span style="color: #0000ff;">public</span><span style="color: #008080;">:</span><br />
CDLLFunctionImports<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">void</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
<br />
<span style="color: #0000ff;">typedef</span> BOOL <span style="color: #008000;">&#40;</span>WINAPI <span style="color: #000040;">*</span> PADDCLIPBOARDFORMATLISTENER<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#40;</span>HWND<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
<span style="color: #0000ff;">typedef</span> BOOL <span style="color: #008000;">&#40;</span>WINAPI <span style="color: #000040;">*</span> PREMOVECLIPBOARDFORMATLISTENER<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#40;</span>HWND<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
<br />
PADDCLIPBOARDFORMATLISTENER pRemoveClipboardFormatListener<span style="color: #008080;">;</span><br />
PREMOVECLIPBOARDFORMATLISTENER pAddClipboardFormatListener<span style="color: #008080;">;</span><br />
<br />
<span style="color: #0000ff;">private</span><span style="color: #008080;">:</span><br />
<span style="color: #0000ff;">void</span> Import<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">void</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
HMODULE GetModuleHandle<span style="color: #008000;">&#40;</span>TCHAR <span style="color: #000040;">*</span> ModuleName<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span><br />
<br />
<span style="color: #0000ff;">extern</span> CDLLFunctionImports DLLFunctionImports<span style="color: #008080;">;</span><br />
<br />
<span style="color: #339900;">#pragma pack (pop)</span></div></div>
<p>typedef’ом определяем типы указатели на функции с нужной нам сигнатурой. В принципе, мне бы тут хватило и одного типа, но пусть уж будет два для благозвучия. Потом определяем экземпляры указателей на эти функции. Все просто. Еще объявляем глобальный объект, экземпляр нужного класса.</p>
<p>Файл реализации:</p>
<div class="codecolorer-container cpp default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><div class="cpp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #339900;">#include &quot;ph.h&quot;</span><br />
<span style="color: #339900;">#include &quot;dllfunctionimports.h&quot;</span><br />
<br />
CDLLFunctionImports DLLFunctionImports<span style="color: #008080;">;</span><br />
<br />
CDLLFunctionImports<span style="color: #008080;">::</span><span style="color: #007788;">CDLLFunctionImports</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">void</span><span style="color: #008000;">&#41;</span><br />
<span style="color: #008000;">&#123;</span><br />
pAddClipboardFormatListener <span style="color: #000080;">=</span> <span style="color: #0000ff;">NULL</span><span style="color: #008080;">;</span><br />
pRemoveClipboardFormatListener <span style="color: #000080;">=</span> <span style="color: #0000ff;">NULL</span><span style="color: #008080;">;</span><br />
<br />
Import<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
<span style="color: #008000;">&#125;</span><br />
<br />
<span style="color: #0000ff;">void</span> CDLLFunctionImports<span style="color: #008080;">::</span><span style="color: #007788;">Import</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">void</span><span style="color: #008000;">&#41;</span><br />
<span style="color: #008000;">&#123;</span><br />
OSVERSIONINFO OSVersionInfo<span style="color: #008080;">;</span><br />
OSVersionInfo.<span style="color: #007788;">dwOSVersionInfoSize</span><span style="color: #000080;">=</span><span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span>OSVersionInfo<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
<br />
<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>GetVersionEx<span style="color: #008000;">&#40;</span><span style="color: #000040;">&amp;</span>OSVersionInfo<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><br />
<span style="color: #008000;">&#123;</span><br />
<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>OSVersionInfo.<span style="color: #007788;">dwMajorVersion</span> <span style="color: #000080;">&gt;=</span> <span style="color: #0000dd;">6</span><span style="color: #008000;">&#41;</span><br />
<span style="color: #008000;">&#123;</span><br />
HMODULE hModule <span style="color: #000080;">=</span> GetModuleHandle<span style="color: #008000;">&#40;</span>_T<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;USER32.DLL&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>hModule <span style="color: #000040;">!</span><span style="color: #000080;">=</span> <span style="color: #0000ff;">NULL</span><span style="color: #008000;">&#41;</span><br />
<span style="color: #008000;">&#123;</span><br />
pAddClipboardFormatListener <span style="color: #000080;">=</span> PADDCLIPBOARDFORMATLISTENER<span style="color: #008000;">&#40;</span>GetProcAddress<span style="color: #008000;">&#40;</span>hModule, <span style="color: #FF0000;">&quot;AddClipboardFormatListener&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
pRemoveClipboardFormatListener <span style="color: #000080;">=</span> PREMOVECLIPBOARDFORMATLISTENER<span style="color: #008000;">&#40;</span>GetProcAddress<span style="color: #008000;">&#40;</span>hModule, <span style="color: #FF0000;">&quot;RemoveClipboardFormatListener&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
<span style="color: #008000;">&#125;</span><br />
<span style="color: #008000;">&#125;</span><br />
<span style="color: #008000;">&#125;</span><br />
<span style="color: #008000;">&#125;</span><br />
<br />
HMODULE CDLLFunctionImports<span style="color: #008080;">::</span><span style="color: #007788;">GetModuleHandle</span><span style="color: #008000;">&#40;</span>TCHAR <span style="color: #000040;">*</span> ModuleName<span style="color: #008000;">&#41;</span><br />
<span style="color: #008000;">&#123;</span><br />
HMODULE hModule <span style="color: #000080;">=</span> <span style="color: #008080;">::</span><span style="color: #007788;">GetModuleHandle</span><span style="color: #008000;">&#40;</span>ModuleName<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>hModule <span style="color: #000080;">==</span> <span style="color: #0000ff;">NULL</span><span style="color: #008000;">&#41;</span><br />
<span style="color: #008000;">&#123;</span><br />
hModule <span style="color: #000080;">=</span> <span style="color: #008080;">::</span><span style="color: #007788;">LoadLibrary</span><span style="color: #008000;">&#40;</span>ModuleName<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
<span style="color: #008000;">&#125;</span><br />
<br />
<span style="color: #0000ff;">return</span> hModule<span style="color: #008080;">;</span><br />
<span style="color: #008000;">&#125;</span></div></div>
<p>В конструкторе вызываем import, который убедившись что у нас подходящая версия операционки, получает и сохраняет адреса необходимых процедур. Все магия закончилась, дальше когда нам необходимо вызвать новую функцию, используем такой вызов:</p>
<div class="codecolorer-container cpp default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="cpp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">DLLFunctionImports.<span style="color: #007788;">pAddClipboardFormatListener</span><span style="color: #008000;">&#40;</span>handle<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></div></div>
<p>Пользуясь случаем, хочу сказать спасибо человеку, который это все написал и поделился кодом. Еще он написал отличный и пока еще бесплатный <a href="http://www.qualibyte.com/pixelformer/" target="_blank">lightweight yet powerful icon and bitmap editor</a>, так что если кому приходится редактировать иконки, берите, а то он скоро зарелизит и захочет денег <img src='http://begemotov.net/creator/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<hr />
<p><small>© Begemot для <a href="http://begemotov.net/creator">Блог разработчика</a>, 2009. |
<a href="http://begemotov.net/creator/programming/ruchnaya-zagruzka-funktsiy-iz-dll-ili-kak-v-programme-ispolzovat-funktsii-iz-vista-api/">Ссылка</a> |
<a href="http://begemotov.net/creator/programming/ruchnaya-zagruzka-funktsiy-iz-dll-ili-kak-v-programme-ispolzovat-funktsii-iz-vista-api/#comments">Уже дискуссия (20)</a>
<br/>
По теме: <a href="http://begemotov.net/creator/tag/c/" rel="tag">c++</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://begemotov.net/creator/programming/ruchnaya-zagruzka-funktsiy-iz-dll-ili-kak-v-programme-ispolzovat-funktsii-iz-vista-api/feed/</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>Что читать</title>
		<link>http://begemotov.net/creator/programming/chto-chitat/</link>
		<comments>http://begemotov.net/creator/programming/chto-chitat/#comments</comments>
		<pubDate>Mon, 07 Sep 2009 20:55:52 +0000</pubDate>
		<dc:creator>Begemot</dc:creator>
				<category><![CDATA[Отзывы]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[книги]]></category>

		<guid isPermaLink="false">http://begemotov.net/creator/programming/chto-chitat/</guid>
		<description><![CDATA[Ездили тут вчера второй раз отдыхать на Aрабатку, по пути прочел книжку “Секреты управления программистами” – произвел upgrade, теперь&#160; могу идти работать тимлидом, как раз я только с работы ушел Книжка не плохая, хотя бы тем то что можно прочесть за два часа не напрягаясь Маленький объем, большой шрифт, качественная бумага, приятный стиль. Воды нету, [...]]]></description>
			<content:encoded><![CDATA[<p>Ездили тут вчера второй раз <a href="http://begemotov.net/blog/2009/08/26/arabatskaya-strelka-goryachiy-istochnik-sivash/" target="_blank">отдыхать на Aрабатку</a>, по пути прочел книжку “<a href="https://www.ozon.ru/context/detail/id/3939090/?partner=beg" target="_blank">Секреты управления программистами</a>” – произвел upgrade, теперь&#160; могу идти работать тимлидом, как раз я только с работы ушел <img src='http://begemotov.net/creator/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Книжка не плохая, хотя бы тем то что можно прочесть за два часа не напрягаясь <img src='http://begemotov.net/creator/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Маленький объем, большой шрифт, качественная бумага, приятный стиль. Воды нету, бреда вроде тоже нету, ну разве за исключением того, что в книжке для project manager’ов объясняется что такое Open Source.&#160; В принципе умные, но банальные вещи о том что стоит и чего не стоит делать хорошему менеджеру что-бы иметь хорошую команду, работу, карьеру. Менеджерам наверное почитать полезно, мысли то хоть и банально-известные, но наверняка многие им не следуют.</p>
<p>А пишу я собственно для того что бы спросить совета. Меня тут озон недавно обрадовал, что у меня оказывается день рождения как партнера озона:) И посему они мне дарят бесплатную доставку… я решил раз такой праздник, я должен обязательно себе что-нибудь подарить. Вот не могу выбрать:</p>
<p><a href="https://www.ozon.ru/context/detail/id/3159814/?partner=beg" target="_blank" rel="nofollow"><img src="https://www.ozon.ru/multimedia/books_covers/1000479101.jpg" /></a>&#160; <a href="https://www.ozon.ru/context/detail/id/1308678/?partner=beg" target="_blank" rel="license"><img src="https://www.ozon.ru/multimedia/books_covers/1000038279.jpg" /></a> </p>
<p align="left">&#160;</p>
<p align="left"><a href="https://www.ozon.ru/context/detail/id/3159814/?partner=beg" target="_blank">Совершенный код</a>&#160;&#160; или&#160; <a href="https://www.ozon.ru/context/detail/id/1308678/?partner=beg" target="_blank" rel="nofollow">Рефакторинг. Улучшение существующего кода</a>. Давно хочу и то и то прочесть… Есть кто читал – выскажитесь в комментариях что лучше, с чего начать. Что лучше уметь сразу писать совершенный код или уметь совершенствовать любой код <img src='http://begemotov.net/creator/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p align="left">
<hr />
<p><small>© Begemot для <a href="http://begemotov.net/creator">Блог разработчика</a>, 2009. |
<a href="http://begemotov.net/creator/programming/chto-chitat/">Ссылка</a> |
<a href="http://begemotov.net/creator/programming/chto-chitat/#comments">Уже дискуссия (17)</a>
<br/>
По теме: <a href="http://begemotov.net/creator/tag/knigi/" rel="tag">книги</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://begemotov.net/creator/programming/chto-chitat/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>О безопасном приведении типов</title>
		<link>http://begemotov.net/creator/programming/o-bezopasnom-privedenii-tipov/</link>
		<comments>http://begemotov.net/creator/programming/o-bezopasnom-privedenii-tipov/#comments</comments>
		<pubDate>Mon, 03 Aug 2009 13:41:36 +0000</pubDate>
		<dc:creator>Begemot</dc:creator>
				<category><![CDATA[Программирование]]></category>

		<guid isPermaLink="false">http://begemotov.net/creator/?p=612</guid>
		<description><![CDATA[Семь раз отмерь - один отрежь (с) Ну или вернее о той ерунде которую я сегодня написал. Задача была такая: подменяем оконную процедуру, при получении определенного сообщения берем wParam, преобразуем к указателю на нужный класс и вызываем функцию член. Сразу представили ужасы, ждущие пользователя если нам придет это сообщение (откуда-нибудь), но без указателя на наш [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: right;">Семь раз отмерь - один отрежь (с)</p>
<p>Ну или вернее о той ерунде которую я сегодня написал.</p>
<p>Задача была такая: подменяем оконную процедуру, при получении определенного сообщения берем wParam, преобразуем к указателю на нужный класс и вызываем функцию член. Сразу представили ужасы, ждущие пользователя если нам придет это сообщение (откуда-нибудь), но без указателя на наш класс. А значит надо, как-то проверять. Как?</p>
<p>Первое что приходит в голову - <strong>dynamic_cast&lt;&gt;()</strong>, читаем что бы освежить запас мудрости:</p>
<blockquote><p>Безопасное приведение по иерархии наследования, в том числе и для виртуального наследования.<br />
dynamic_cast(base_class_ptr_expr)<br />
Используется RTTI (Runtime Type Information), чтобы привести один указатель на объект класса к другому указателю на объект класса. Классы должны быть полиморфными, то есть в базовом классе должна быть хотя бы одна виртуальная функция. Если эти условие не соблюдено, ошибка возникнет на этапе компиляции. Если приведение невозможно, то об этом станет ясно только на этапе выполнения программы и будет возвращен NULL.<br />
dynamic_cast(base_class_ref_expr)<br />
Работа со ссылками происходит почти как с указателями, но в случае ошибки во время исполнения будет выброшено исключение bad_cast.</p></blockquote>
<p>Спасибо Алёне, там же читаем и про <a href="http://alenacpp.blogspot.com/2005/08/c.html">остальные возможности приведения типов в c++</a>.</p>
<p><strong>dynamic_cast&lt;&gt;()</strong> приведение конечно безопасное, но wParam в XXX* преобразовывать оно разумеется не хочет, не компилится. Выкрутился следующим образом, благо у меня был базовый класс:</p>
<div class="codecolorer-container cpp default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="cpp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">XXXBase &nbsp;<span style="color: #000040;">*</span> t <span style="color: #000080;">=</span> <span style="color: #0000ff;">reinterpret_cast</span><span style="color: #000080;">&lt;</span>XXXBase<span style="color: #000040;">*</span><span style="color: #000080;">&gt;</span><span style="color: #008000;">&#40;</span>wParam<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
XXX <span style="color: #000040;">*</span> p <span style="color: #000080;">=</span> <span style="color: #0000ff;">NULL</span><span style="color: #008080;">;</span><br />
<span style="color: #0000ff;">try</span><br />
<span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp;p <span style="color: #000080;">=</span> <span style="color: #0000ff;">dynamic_cast</span><span style="color: #000080;">&lt;</span>XXX<span style="color: #000080;">&gt;</span><span style="color: #008000;">&#40;</span>t<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
<span style="color: #008000;">&#125;</span><br />
<span style="color: #0000ff;">catch</span><span style="color: #008000;">&#40;</span>...<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><span style="color: #008000;">&#125;</span><br />
<br />
<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>p<span style="color: #008000;">&#41;</span><br />
<span style="color: #008000;">&#123;</span><br />
<span style="color: #666666;">// all ok...</span><br />
<span style="color: #008000;">&#125;</span></div></div>
<p>Абсолютно не представляю насколько это идеологически правильно, переносимо или хорошо, скорее всего неправильно, криво и непереносимо:). Но у меня работает, почему dymamic_cast кидает исключение вместо того что бы вернуть NULL, я правда не понимаю, но практика (Visual Studio 2008) показывает что так и есть.</p>
<p>Тестировалось передачей 0 в качестве wParam и заменой первой строчки на</p>
<div class="codecolorer-container cpp default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="cpp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #0000ff;">int</span> <span style="color: #000040;">*</span> tt <span style="color: #000080;">=</span> <span style="color: #0000dd;">new</span> <span style="color: #0000ff;">int</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">4</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
XXXBase &nbsp;<span style="color: #000040;">*</span> t <span style="color: #000080;">=</span> <span style="color: #0000ff;">reinterpret_cast</span><span style="color: #000080;">&lt;</span>XXXBase<span style="color: #000080;">&gt;</span><span style="color: #008000;">&#40;</span>tt<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></div></div>
<p>Все ок - исключение ловится, замалчивается, указатель остается нулевой.</p>
<hr />
<p><small>© Begemot для <a href="http://begemotov.net/creator">Блог разработчика</a>, 2009. |
<a href="http://begemotov.net/creator/programming/o-bezopasnom-privedenii-tipov/">Ссылка</a> |
<a href="http://begemotov.net/creator/programming/o-bezopasnom-privedenii-tipov/#comments">Уже дискуссия (28)</a>
<br/>
По теме: <br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://begemotov.net/creator/programming/o-bezopasnom-privedenii-tipov/feed/</wfw:commentRss>
		<slash:comments>28</slash:comments>
		</item>
	</channel>
</rss>

