<?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>Maniac Programmer's Blog &#187; C / C++</title>
	<atom:link href="http://2lx.ru/category/programming/ccpp/feed/" rel="self" type="application/rss+xml" />
	<link>http://2lx.ru</link>
	<description>Блог помешанного программиста</description>
	<lastBuildDate>Fri, 20 Jan 2012 10:46:03 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Рекурсивный поиск файлов на WinAPI</title>
		<link>http://2lx.ru/2011/12/rekursivnyj-poisk-fajlov-na-winapi/</link>
		<comments>http://2lx.ru/2011/12/rekursivnyj-poisk-fajlov-na-winapi/#comments</comments>
		<pubDate>Tue, 20 Dec 2011 10:38:44 +0000</pubDate>
		<dc:creator>Кто-то</dc:creator>
				<category><![CDATA[C / C++]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[WinAPI]]></category>
		<category><![CDATA[рекурсия]]></category>

		<guid isPermaLink="false">http://2lx.ru/?p=603</guid>
		<description><![CDATA[Функция рекурсивного поиска файлов с использованием функций WinAPI

void FindRecursive(char *path, char *mask){
	WIN32_FIND_DATA finddata;
	char p[512], buf[512];
	HANDLE hFind;
	bool removed;

	// ищем файлы
	sprintf(p,&#34;%s\\%s&#34;,path, mask);
	hFind = FindFirstFile(p,&#38;finddata);
	if(hFind!=INVALID_HANDLE_VALUE)
	{
		do
		{
// Делаем что-нибудь с найденными файлами

		}while(FindNextFile(hFind,&#38;finddata));
	}
	FindClose(hFind);

	// ищем подпапки
	sprintf(p,&#34;%s\\*&#34;,path);
	hFind = FindFirstFile(p,&#38;finddata);
	if(hFind!=INVALID_HANDLE_VALUE)
	{
		do
		{
			if ((finddata.dwFileAttributes &#38; FILE_ATTRIBUTE_DIRECTORY))
			{
				if (strcmp(finddata.cFileName,&#34;..&#34;) &#38;&#38; strcmp(finddata.cFileName,&#34;.&#34;))
				{
					FindRecursive(buf, mask);
				}
			}
		}while(FindNextFile(hFind,&#38;finddata));
	}
	FindClose(hFind);
}

]]></description>
		<wfw:commentRss>http://2lx.ru/2011/12/rekursivnyj-poisk-fajlov-na-winapi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Получение списка установленных программ на WinAPI</title>
		<link>http://2lx.ru/2011/11/poluchenie-spiska-ustanovlennyx-programm-na-winapi/</link>
		<comments>http://2lx.ru/2011/11/poluchenie-spiska-ustanovlennyx-programm-na-winapi/#comments</comments>
		<pubDate>Mon, 07 Nov 2011 10:31:09 +0000</pubDate>
		<dc:creator>Кто-то</dc:creator>
				<category><![CDATA[C / C++]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[система]]></category>

		<guid isPermaLink="false">http://2lx.ru/?p=599</guid>
		<description><![CDATA[

#include &#60;windows.h&#62;
#include &#60;stdio.h&#62;

int main()
{
 DWORD dwIndex = 0;
 LONG ret;
 DWORD cbName = 256;
 TCHAR szSubKeyName[256];
 char szDisplayName[256];
 DWORD dwSize;
 DWORD dwType;

 // Открываем ветку реестра со списком установленных программ
 HKEY hKey;
 if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, &#34;Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall&#34;, 0, KEY_READ, &#38;hKey) != ERROR_SUCCESS)
 return;

 // Поочередно проходим по каждому вложенному разделу
 while ((ret ...]]></description>
		<wfw:commentRss>http://2lx.ru/2011/11/poluchenie-spiska-ustanovlennyx-programm-na-winapi/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Base64 в C++</title>
		<link>http://2lx.ru/2011/10/base64-v-c/</link>
		<comments>http://2lx.ru/2011/10/base64-v-c/#comments</comments>
		<pubDate>Wed, 19 Oct 2011 10:25:54 +0000</pubDate>
		<dc:creator>Кто-то</dc:creator>
				<category><![CDATA[C / C++]]></category>
		<category><![CDATA[C++]]></category>

		<guid isPermaLink="false">http://2lx.ru/?p=597</guid>
		<description><![CDATA[В C++ нет встроенных функций для работы с Base64, однако есть готовые сторонние библиотеки.
Очень хорошую библиотеку для кодирования/декодирования Base64 в C++ можно найти тут.
Скачиваем с ранееупомянутой ссылки файлы base64.cpp и base64.h, и подключаем их к своемуц проекту.
Теперь достаточно просто воспользоваться функциями base64_encode и base64_decode:

#include &#34;base64.h&#34;
#include &#60;iostream&#62;
#include &#60;fstream&#62;

using namespace std;

int main(){
 ...]]></description>
		<wfw:commentRss>http://2lx.ru/2011/10/base64-v-c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Компилятор Brainfack</title>
		<link>http://2lx.ru/2011/09/kompilyator-brainfack/</link>
		<comments>http://2lx.ru/2011/09/kompilyator-brainfack/#comments</comments>
		<pubDate>Thu, 15 Sep 2011 05:20:27 +0000</pubDate>
		<dc:creator>Кто-то</dc:creator>
				<category><![CDATA[C / C++]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[Ъ-говнокод]]></category>

		<guid isPermaLink="false">http://2lx.ru/?p=593</guid>
		<description><![CDATA[Исходник компилятора для языка Barinfuck. Нашел на просторах интернета.

#include &#60;iostream&#62;
#include &#60;fstream&#62;
#include &#60;string&#62;
#include &#60;cstdlib&#62;
using namespace std;
int main(int argc,char** argv)
{
	if(argc&#60;3){cout&#60;&#60;&#34;BrainFuck\n usage: brainfuck file.bf executable&#34;;return 0;}
	string bfname,cname,exename;
	bfname=argv[1];
	exename=argv[2];
	cname=bfname+&#34;.c&#34;;
	ifstream in(bfname.c_str());
	ofstream out(cname.c_str());
	//Printing Declarations
	out&#60;&#60;&#34;//Brainfuck program declarations&#34;&#60;&#60;endl;
	out&#60;&#60;&#34;#include &#60;stdio.h&#62;&#34;&#60;&#60;endl;
	out&#60;&#60;&#34;int main()&#34;&#60;&#60;endl;
	out&#60;&#60;&#34;{&#34;&#60;&#60;endl;
	out&#60;&#60;&#34;unsigned char mem[30000];&#34;&#60;&#60;endl;
	out&#60;&#60;&#34;unsigned char* p=&#38;mem[0];&#34;&#60;&#60;endl;
	out&#60;&#60;&#34;int i;for(i=0;i&#60;30000;i++)mem[i]=0;&#34;&#60;&#60;endl;
	out&#60;&#60;&#34;//End Brainfuck program declarations&#34;&#60;&#60;endl;
	out&#60;&#60;&#34;//Starting Brainfuck code&#34;&#60;&#60;endl;
	//End printing declarations
	unsigned char instr;
	while(1)
	{
		in.get((char&#38;)instr);
		if(in.fail())break;
		switch(instr)
		{
			case &#039;+&#039;:out&#60;&#60;&#34;(*p)++;\n&#34;;break;
			case &#039;-&#039;:out&#60;&#60;&#34;(*p)--;\n&#34;;break;
			case &#039;&#62;&#039;:out&#60;&#60;&#34;p++;\n&#34;;break;
			case &#039;&#60;&#039;:out&#60;&#60;&#34;p--;\n&#34;;break;
			case &#039;.&#039;:out&#60;&#60;&#34;putchar(*p);\n&#34;;break;
			case ...]]></description>
		<wfw:commentRss>http://2lx.ru/2011/09/kompilyator-brainfack/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Вычисление восхода и захода солнца</title>
		<link>http://2lx.ru/2011/08/vychislenie-vosxoda-i-zaxoda-solnca/</link>
		<comments>http://2lx.ru/2011/08/vychislenie-vosxoda-i-zaxoda-solnca/#comments</comments>
		<pubDate>Wed, 10 Aug 2011 05:11:25 +0000</pubDate>
		<dc:creator>Кто-то</dc:creator>
				<category><![CDATA[C / C++]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[математика]]></category>

		<guid isPermaLink="false">http://2lx.ru/?p=590</guid>
		<description><![CDATA[Функция для вычисления восхода и захода солнца по местному времени.
Входные данные:
loc_time : локальное время (любое время текущего дня)
time_zone : часовой пояс (часовой сдвиг от гринвича, например для Москвы зимой=4, летом=5)
f, l : широта и долгота местоположения (в градусах)
t_rise : буфер для возвращения времени восхода солнца (в часах)
t_set : буфер для ...]]></description>
		<wfw:commentRss>http://2lx.ru/2011/08/vychislenie-vosxoda-i-zaxoda-solnca/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Создаем просмотрщик фотографий ВКонтакте на Qt. Часть 1: Авторизуемся вконтакте</title>
		<link>http://2lx.ru/2011/07/sozdaem-prosmotrshhik-fotografij-vkontakte-na-qt-chast-1-avtorizuemsya-vkontakte/</link>
		<comments>http://2lx.ru/2011/07/sozdaem-prosmotrshhik-fotografij-vkontakte-na-qt-chast-1-avtorizuemsya-vkontakte/#comments</comments>
		<pubDate>Sun, 10 Jul 2011 14:34:59 +0000</pubDate>
		<dc:creator>Кто-то</dc:creator>
				<category><![CDATA[C / C++]]></category>
		<category><![CDATA[Qt]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[ВКонтакте]]></category>

		<guid isPermaLink="false">http://2lx.ru/?p=585</guid>
		<description><![CDATA[Авторизация настольных приложений ВКонтакте прозиводится с помощью протокола OAuth 2.0. Согласно данным в документации к API авторизация проходит в 3 этапа:
1. Открытие окна браузера для авторизации пользователя;
2. Получение разрешения на доступ к данным пользователя;
3. Получение ключа access_token для работы с API ВКонтакте.
После прохождения этих шагов и получения access_token можно производить ...]]></description>
		<wfw:commentRss>http://2lx.ru/2011/07/sozdaem-prosmotrshhik-fotografij-vkontakte-na-qt-chast-1-avtorizuemsya-vkontakte/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Quine на C++</title>
		<link>http://2lx.ru/2011/06/quine-na-c/</link>
		<comments>http://2lx.ru/2011/06/quine-na-c/#comments</comments>
		<pubDate>Wed, 22 Jun 2011 15:24:13 +0000</pubDate>
		<dc:creator>Кто-то</dc:creator>
				<category><![CDATA[C / C++]]></category>
		<category><![CDATA[C++]]></category>

		<guid isPermaLink="false">http://2lx.ru/?p=583</guid>
		<description><![CDATA[ример реализации квайна на C++.
Из Википедии:

Куайн, квайн (англ. quine) — компьютерная программа (частный случай метапрограммирования), которая выдаёт на выходе точную копию своего исходного текста. 

#include &#60;stdio.h&#62;
int main (void) { char q=&#039;&#34;&#039;; puts(&#34;#include &#60;stdio.h&#62;&#34;); char *x = &#34;int main (void)
{ char q=&#039;%c&#039;; puts(%c#include &#60;stdio.h&#62;%c); char *x = %c%s%c; printf (x,q,q,q,q,x,q,q,q);
return puts(%c%c); ...]]></description>
		<wfw:commentRss>http://2lx.ru/2011/06/quine-na-c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>QtCreator и Winsock</title>
		<link>http://2lx.ru/2011/01/qtcreator-i-winsock/</link>
		<comments>http://2lx.ru/2011/01/qtcreator-i-winsock/#comments</comments>
		<pubDate>Sat, 15 Jan 2011 15:54:33 +0000</pubDate>
		<dc:creator>Кто-то</dc:creator>
				<category><![CDATA[C / C++]]></category>
		<category><![CDATA[Qt]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[WinAPI]]></category>

		<guid isPermaLink="false">http://2lx.ru/?p=560</guid>
		<description><![CDATA[Понадобилось в проект на Qt подключить классические сокеты. Но в комплекте с Qt SDK универсального средства для этого нет.
В Linux для этого подключают sys/socket.h, а в Windows&#160;&#8212; winsock.h
На этапе подключения заголовочных файлов с этим проблем нет. Проверяем, есть-ли переменная WIN32, и подключаем какие нужно файлы:
#ifdef WIN32
#include &#60;winsock2.h&#62;
#else
#include &#60;netinet/in.h&#62;
#include &#60;arpa/inet.h&#62;
#include &#60;sys/socket.h&#62;
#endif

Но ...]]></description>
		<wfw:commentRss>http://2lx.ru/2011/01/qtcreator-i-winsock/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Выбор нескольких элементов в QListWidget</title>
		<link>http://2lx.ru/2010/11/vybor-neskolkix-elementov-v-qlistwidget/</link>
		<comments>http://2lx.ru/2010/11/vybor-neskolkix-elementov-v-qlistwidget/#comments</comments>
		<pubDate>Wed, 24 Nov 2010 17:11:33 +0000</pubDate>
		<dc:creator>Кто-то</dc:creator>
				<category><![CDATA[C / C++]]></category>
		<category><![CDATA[Qt]]></category>
		<category><![CDATA[C++]]></category>

		<guid isPermaLink="false">http://2lx.ru/?p=552</guid>
		<description><![CDATA[1. задаем SelectionMode виджета в ExtendedSelection:
ui-&#62;listWidget-&#62;setSelectionMode(QAbstractItemView::ExtendedSelection);
2. вычитываем содержимое списка listWidget->selectedItems ():
QString a(&#34;&#34;);
foreach (QListWidgetItem * item, ui-&#62;listWidget-&#62;selectedItems())
 a = QString(&#34;%1 %2&#34;).arg(a).arg(item-&#62;text());
3. ??????
4. PROFIT!
]]></description>
		<wfw:commentRss>http://2lx.ru/2010/11/vybor-neskolkix-elementov-v-qlistwidget/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Создание ярлыка из C++</title>
		<link>http://2lx.ru/2010/11/sozdanie-yarlyka-iz-c/</link>
		<comments>http://2lx.ru/2010/11/sozdanie-yarlyka-iz-c/#comments</comments>
		<pubDate>Sun, 07 Nov 2010 17:01:58 +0000</pubDate>
		<dc:creator>Кто-то</dc:creator>
				<category><![CDATA[C / C++]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[WinAPI]]></category>

		<guid isPermaLink="false">http://2lx.ru/?p=549</guid>
		<description><![CDATA[
#include &#60;objidl.h&#62;
#include &#60;shlobj.h&#62;
...
//---------------------------------------------------------------------
#define HOTKEY(modifier,key) ((((modifier)&#38;0xff)&#60;&#60;8)&#124;((key)&#38;0xff))
//---------------------------------------------------------------------
// Создание ярлыка
// Входные параметры:
// pwzShortCutFileName - путь и имя ярлыка, например, &#34;C:\\Блокнот.lnk&#34;
// Если не указан путь, ярлык будет создан в папке, указанной в следующем параметре.
// Прим.: Windows сама НЕ добавляет к имени расширение .lnk
// pszPathAndFileName - путь и имя программы/файла, например, &#34;C:\\Windows\\NotePad.Exe&#34;
// или &#34;C:\\Мои документы\\Файл.doc&#34;
// ...]]></description>
		<wfw:commentRss>http://2lx.ru/2010/11/sozdanie-yarlyka-iz-c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

