<?xml version="1.0" encoding="UTF-8" ?> <rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>melt日記</title><link>http://blogs.wankuma.com/melt/</link><description>.NETすらまともに扱えないへたれのページ</description><managingEditor>melt</managingEditor><dc:language>ja-JP</dc:language><generator>.Text Version 0.95.2004.102</generator><item><dc:creator>melt</dc:creator><title>ボゴソート</title><link>http://blogs.wankuma.com/melt/archive/2008/05/29/140039.aspx</link><pubDate>Thu, 29 May 2008 20:35:00 GMT</pubDate><guid>http://blogs.wankuma.com/melt/archive/2008/05/29/140039.aspx</guid><wfw:comment>http://blogs.wankuma.com/melt/comments/140039.aspx</wfw:comment><comments>http://blogs.wankuma.com/melt/archive/2008/05/29/140039.aspx#Feedback</comments><slash:comments>103</slash:comments><wfw:commentRss>http://blogs.wankuma.com/melt/comments/commentRss/140039.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/melt/services/trackbacks/140039.aspx</trackback:ping><description>&lt;p&gt;&lt;a href="http://ja.wikipedia.org/wiki/%E3%83%9C%E3%82%B4%E3%82%BD%E3%83%BC%E3%83%88" target="_blank"&gt;ボゴソート - Wikipedia&lt;/a&gt;&lt;/p&gt;
&lt;br&gt;
&lt;p&gt;これ考えた奴天才だろ……。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/melt/aggbug/140039.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>melt</dc:creator><title>() =&gt; {};</title><link>http://blogs.wankuma.com/melt/archive/2008/05/28/139784.aspx</link><pubDate>Wed, 28 May 2008 15:06:00 GMT</pubDate><guid>http://blogs.wankuma.com/melt/archive/2008/05/28/139784.aspx</guid><wfw:comment>http://blogs.wankuma.com/melt/comments/139784.aspx</wfw:comment><comments>http://blogs.wankuma.com/melt/archive/2008/05/28/139784.aspx#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://blogs.wankuma.com/melt/comments/commentRss/139784.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/melt/services/trackbacks/139784.aspx</trackback:ping><description>&lt;p&gt;() =&gt; {};&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/melt/aggbug/139784.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>melt</dc:creator><title>[C++]コードチェック</title><link>http://blogs.wankuma.com/melt/archive/2008/05/27/139644.aspx</link><pubDate>Tue, 27 May 2008 17:20:00 GMT</pubDate><guid>http://blogs.wankuma.com/melt/archive/2008/05/27/139644.aspx</guid><wfw:comment>http://blogs.wankuma.com/melt/comments/139644.aspx</wfw:comment><comments>http://blogs.wankuma.com/melt/archive/2008/05/27/139644.aspx#Feedback</comments><slash:comments>109</slash:comments><wfw:commentRss>http://blogs.wankuma.com/melt/comments/commentRss/139644.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/melt/services/trackbacks/139644.aspx</trackback:ping><description>			&lt;p&gt;今のプロジェクト、毎週コードチェックの日があります。&lt;/p&gt;
			&lt;p&gt;他の人がチェックインしたファイルを読んで、ここは間違ってるとかここは変じゃない？ということをお互いに指摘し合います。&lt;/p&gt;
			&lt;br&gt;

			&lt;p&gt;自分は下っ端なのでチェックすることはあまり無いのですが、それでも時々はチェックしています。&lt;/p&gt;
			&lt;br&gt;

			&lt;p&gt;自分は現在のアプリケーションの仕様についてはあまり理解していないので、設計的な指摘よりもミクロな部分ばかり指摘しています。&lt;/p&gt;
			&lt;p&gt;今まで指摘してきたのは、例えばこんな感じです。&lt;/p&gt;
			&lt;br&gt;

			&lt;p&gt;１．&lt;/p&gt;

&lt;pre class="syntax-highlight"&gt;
std::auto_ptr&amp;lt;&lt;span class="synType"&gt;char&lt;/span&gt;&amp;gt; pBuffer(&lt;span class="synStatement"&gt;new&lt;/span&gt; &lt;span class="synType"&gt;char&lt;/span&gt;[BUFFER_SIZE]);
&lt;/pre&gt;

			&lt;p&gt;char は POD 型なので問題ないですが、std::auto_ptr は delete で解放するので delete[] で解放する必要のあるポインタに対して使ってはいけないと思います。&lt;/p&gt;
			&lt;br&gt;

			&lt;p&gt;２．&lt;/p&gt;
&lt;pre class="syntax-highlight"&gt;
(progress &amp;gt; total) ? total : progress
&lt;/pre&gt;

			&lt;p&gt;std::min を使った方が分かりやすいと思います。&lt;/p&gt;
			&lt;br&gt;

			&lt;p&gt;３．&lt;/p&gt;

&lt;pre class="syntax-highlight"&gt;
&lt;span class="synStatement"&gt;if&lt;/span&gt; (m_pHoge)
{
    &lt;span class="synStatement"&gt;delete&lt;/span&gt; m_pHoge;
    m_pHoge = &lt;span class="synConstant"&gt;NULL&lt;/span&gt;;
}
&lt;/pre&gt;

			&lt;p&gt;null ポインタに対する delete は、C++ 規格上は安全です。&lt;/p&gt;
			&lt;p&gt;よって、（よっぽどひどい operator delete を定義していない限りは）null チェックをする必要は無いと思います。&lt;/p&gt;

			&lt;br&gt;

			&lt;p&gt;４．&lt;/p&gt;
&lt;pre class="syntax-highlight"&gt;
std::string str = ...;
DWORD ret = GetFileAttributes(str.c_str());
&lt;/pre&gt;

			&lt;p&gt;str は std::string なので、GetFileAttributesA を使用する必要があると思います。&lt;/p&gt;
			&lt;br&gt;

			&lt;p&gt;５．&lt;/p&gt;

&lt;pre class="syntax-highlight"&gt;
CString str = ...;
TCHAR dest[MAX_LENGTH] = { &lt;span class="synConstant"&gt;0&lt;/span&gt; };
_tcsncpy(dest, str, _countof(dest));
&lt;/pre&gt;

			&lt;p&gt;str.GetLength() が _countof(dest) 以上だった場合、dest には null 文字がコピーされず（_tcsncpy の仕様）問題が発生すると思います。&lt;/p&gt;
			&lt;br&gt;

			&lt;p&gt;６．&lt;/p&gt;
&lt;pre class="syntax-highlight"&gt;

&lt;span class="synType"&gt;void&lt;/span&gt; ErrorMsg(&lt;span class="synType"&gt;const&lt;/span&gt; TCHAR* sz, &lt;span class="synType"&gt;const&lt;/span&gt; &lt;span class="synType"&gt;char&lt;/span&gt;* file, &lt;span class="synType"&gt;int&lt;/span&gt; line)
{
    TCHAR msg[&lt;span class="synConstant"&gt;1024&lt;/span&gt;];
    _stprintf_s(msg, _countof(msg), _T(&lt;span class="synConstant"&gt;&amp;quot;&lt;/span&gt;&lt;span class="synSpecial"&gt;%s&lt;/span&gt;&lt;span class="synConstant"&gt;[&lt;/span&gt;&lt;span class="synSpecial"&gt;%d&lt;/span&gt;&lt;span class="synConstant"&gt;] : &lt;/span&gt;&lt;span class="synSpecial"&gt;%s&lt;/span&gt;&lt;span class="synConstant"&gt;&amp;quot;&lt;/span&gt;), file, line, sz);
    ::MessageBox(&lt;span class="synConstant"&gt;NULL&lt;/span&gt;, msg, &lt;span class="synConstant"&gt;NULL&lt;/span&gt;, MB_OK);
}

&lt;/pre&gt;

			&lt;p&gt;１個目の %s は %hs を指定する必要があります。&lt;/p&gt;
			&lt;br&gt;

			&lt;br&gt;

			&lt;p&gt;コードチェックは、する側もされる側も良い勉強になりますし、未然にバグを防げることもあります（というかこれがメインなのですが）。&lt;/p&gt;
			&lt;p&gt;また、他人に見られるという意識を持つことによって、書く側もそれなりに気を使って書いてくれるようになります。&lt;/p&gt;

			&lt;br&gt;

			&lt;p&gt;他人のコードを読んで&lt;del datetime="2008-05-27T17:18:05+09:00"&gt;けちを付ける&lt;/del&gt;指摘するのはなかなか面白いものがあります。&lt;/p&gt;
			&lt;p&gt;是非試して頂ければと思います。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/melt/aggbug/139644.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>melt</dc:creator><title>僕らは技術力よりも第一印象で能力を判断されている</title><link>http://blogs.wankuma.com/melt/archive/2008/05/23/139086.aspx</link><pubDate>Fri, 23 May 2008 14:00:00 GMT</pubDate><guid>http://blogs.wankuma.com/melt/archive/2008/05/23/139086.aspx</guid><wfw:comment>http://blogs.wankuma.com/melt/comments/139086.aspx</wfw:comment><comments>http://blogs.wankuma.com/melt/archive/2008/05/23/139086.aspx#Feedback</comments><slash:comments>10</slash:comments><wfw:commentRss>http://blogs.wankuma.com/melt/comments/commentRss/139086.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/melt/services/trackbacks/139086.aspx</trackback:ping><description>			&lt;p&gt;&lt;a href="http://rikunabi-next.yahoo.co.jp/tech/docs/ct_s03600.jsp?p=001333" target="_blank"&gt;僕らは技術力よりも第一印象で能力を判断されている／Ｔｅｃｈ総研&lt;/a&gt;&lt;/p&gt;
			&lt;br&gt;
			&lt;p&gt;見た目で仕事能力を判断する奴全員氏んでいいよ。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/melt/aggbug/139086.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>melt</dc:creator><title>[C++]USES_CONVERSION_EX</title><link>http://blogs.wankuma.com/melt/archive/2008/05/22/138867.aspx</link><pubDate>Thu, 22 May 2008 10:53:00 GMT</pubDate><guid>http://blogs.wankuma.com/melt/archive/2008/05/22/138867.aspx</guid><wfw:comment>http://blogs.wankuma.com/melt/comments/138867.aspx</wfw:comment><comments>http://blogs.wankuma.com/melt/archive/2008/05/22/138867.aspx#Feedback</comments><slash:comments>276</slash:comments><wfw:commentRss>http://blogs.wankuma.com/melt/comments/commentRss/138867.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/melt/services/trackbacks/138867.aspx</trackback:ping><description>			&lt;p&gt;ATL には、A2T だの CA2CT だのといった文字列変換マクロがあります。&lt;/p&gt;
			&lt;br&gt;
			&lt;p&gt;&lt;a href="http://msdn.microsoft.com/ja-jp/library/87zae4a3(VS.80).aspx" target="_blank"&gt;ここ&lt;/a&gt;を見れば分かるのですが、これらのマクロは時代によっていくつかの種類に分かれていたようで、最初に使われていたのは A2T だの A2W といったマクロのようです。&lt;/p&gt;
&lt;pre class="syntax-highlight"&gt;
&lt;span class="synType"&gt;void&lt;/span&gt; foo(&lt;span class="synType"&gt;const&lt;/span&gt; &lt;span class="synType"&gt;char&lt;/span&gt;* p)
{
    USES_CONVERSION;
    TCHAR* pStr = A2T(p);
    ...
}
&lt;/pre&gt;

			&lt;p&gt;しかしこれは _alloca() を使っているため、下手をするとスタックオーバーフローを起こす危険性があったようです。&lt;/p&gt;
			&lt;br&gt;

			&lt;p&gt;そこで作られたのが CA2T や CA2W といった、先頭に C の付いたマクロです。&lt;/p&gt;
			&lt;p&gt;これは固定サイズの配列をローカル変数として取っておき、そこに文字列を格納します。&lt;/p&gt;
			&lt;p&gt;もしローカルの配列に収まらなかった場合はヒープから領域を確保して、そこに文字列を格納します。&lt;/p&gt;
&lt;pre class="syntax-highlight"&gt;
&lt;span class="synType"&gt;void&lt;/span&gt; foo(&lt;span class="synType"&gt;const&lt;/span&gt; &lt;span class="synType"&gt;char&lt;/span&gt;* p)
{
    CA2T pStr(p);
    ...
}
&lt;/pre&gt;

			&lt;p&gt;これなら _alloca() を使っていないので、普通にローカル変数を定義するのと同じ程度しかスタックを消費しません。&lt;/p&gt;
			&lt;br&gt;

			&lt;p&gt;しかし、上記２つのコードを見れば分かるのですが、これらは機械的に置き換えられるものではなく、内容を精査した上で置き換える必要があります。&lt;/p&gt;
			&lt;p&gt;古くから使われている A2T 等のマクロが１万件とかある場合、さすがに手動で置き換える気はしません。&lt;/p&gt;
			&lt;br&gt;

			&lt;p&gt;そこで使えるのが _EX とついたマクロ群。&lt;/p&gt;
			&lt;p&gt;これらを使えば、最初の例は以下のように置き換えることが出来ます。&lt;/p&gt;
&lt;pre class="syntax-highlight"&gt;
&lt;span class="synType"&gt;void&lt;/span&gt; foo(&lt;span class="synType"&gt;const&lt;/span&gt; &lt;span class="synType"&gt;char&lt;/span&gt;* p)
{
    USES_CONVERSION_EX;
    TCHAR* pStr = A2T_EX_DEF(p);
}
&lt;/pre&gt;

			&lt;p&gt;USES_CONVERSION は USES_CONVERSION_EX に、A2T は A2T_EX_DEF に変更するだけです。&lt;/p&gt;

			&lt;p&gt;A2T_EX_DEF というのはどういう動作になるかというと、内部的には &lt;a href="http://blogs.wankuma.com/melt/archive/2007/08/03/88579.aspx" target="_blank"&gt;_ATL_SAFE_ALLOCA&lt;/a&gt; を使っているので、ある程度のサイズ（デフォルトは 1024 バイト）までは _alloca() によって確保しようとして、それ以上になるとヒープから確保します。&lt;/p&gt;
			&lt;p&gt;また、1024 バイト以下であっても _alloca() によってスタックオーバーフローが起きてしまう場合、ヒープから確保してくれます。&lt;/p&gt;
			&lt;br&gt;

			&lt;p&gt;A2T や A2W だとスタックオーバーフローが起きてしまうから使ってはダメ！と言われたけれども件数が多くて手動で直すのが非常に面倒な場合は、このマクロが使えそうな気がします。&lt;/p&gt;
&lt;img src ="http://blogs.wankuma.com/melt/aggbug/138867.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>melt</dc:creator><title>コンポジット状態</title><link>http://blogs.wankuma.com/melt/archive/2008/04/24/135066.aspx</link><pubDate>Thu, 24 Apr 2008 15:43:00 GMT</pubDate><guid>http://blogs.wankuma.com/melt/archive/2008/04/24/135066.aspx</guid><wfw:comment>http://blogs.wankuma.com/melt/comments/135066.aspx</wfw:comment><comments>http://blogs.wankuma.com/melt/archive/2008/04/24/135066.aspx#Feedback</comments><slash:comments>413</slash:comments><wfw:commentRss>http://blogs.wankuma.com/melt/comments/commentRss/135066.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/melt/services/trackbacks/135066.aspx</trackback:ping><description>			&lt;p&gt;&lt;a href="http://blogs.wankuma.com/episteme/archive/2008/04/24/134933.aspx" target="_blank"&gt;冷蔵庫にキリンを入れる方法&lt;/a&gt;を読んで、何で状態が入れ子になるんだろう？と思ったので、状態遷移図を書いてみました。&lt;/p&gt;
			&lt;p&gt;&lt;a href="http://f.hatena.ne.jp/melt_slinc/20080424153439" class="hatena-fotolife" target="_blank"&gt;&lt;img src="http://f.hatena.ne.jp/images/fotolife/m/melt_slinc/20080424/20080424153439.png" alt="f:id:melt_slinc:20080424153439p:image" title="f:id:melt_slinc:20080424153439p:image" class="hatena-fotolife"&gt;&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;ほら、入れ子になんかならないじゃん？とか思ったのですが、何か違う。絶対違う。&lt;/p&gt;

			&lt;p&gt;多分「扉が開いている状態」と「扉が閉まっている状態」という２つの状態で考えるのが普通だろうから、多分こんな風になるのかな？&lt;/p&gt;
			&lt;p&gt;&lt;a href="http://f.hatena.ne.jp/melt_slinc/20080424154029" class="hatena-fotolife" target="_blank"&gt;&lt;img src="http://f.hatena.ne.jp/images/fotolife/m/melt_slinc/20080424/20080424154029.png" alt="f:id:melt_slinc:20080424154029p:image" title="f:id:melt_slinc:20080424154029p:image" class="hatena-fotolife"&gt;&lt;/a&gt;&lt;/p&gt;
			&lt;p&gt;確かに入れ子になってる。&lt;/p&gt;
&lt;img src ="http://blogs.wankuma.com/melt/aggbug/135066.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>melt</dc:creator><title>[C++]なぜ std::stack の pop() は void なのか</title><link>http://blogs.wankuma.com/melt/archive/2008/04/22/134634.aspx</link><pubDate>Tue, 22 Apr 2008 11:46:00 GMT</pubDate><guid>http://blogs.wankuma.com/melt/archive/2008/04/22/134634.aspx</guid><wfw:comment>http://blogs.wankuma.com/melt/comments/134634.aspx</wfw:comment><comments>http://blogs.wankuma.com/melt/archive/2008/04/22/134634.aspx#Feedback</comments><slash:comments>50</slash:comments><wfw:commentRss>http://blogs.wankuma.com/melt/comments/commentRss/134634.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/melt/services/trackbacks/134634.aspx</trackback:ping><description>			&lt;p&gt;std::stack&amp;lt;&amp;gt; を使うたびにいつも思うのですが、何で pop() の戻り値は void になっているのでしょうか？&lt;/p&gt;
			&lt;p&gt;このせいでわざわざ top() で先頭の値を持ってきて一時変数に確保した後 pop() を実行する必要があります。&lt;/p&gt;

&lt;pre class="syntax-highlight"&gt;
std::stack&amp;lt;&lt;span class="synType"&gt;int&lt;/span&gt;&amp;gt; st;
st.push(&lt;span class="synConstant"&gt;10&lt;/span&gt;);

&lt;span class="synComment"&gt;// int n = st.pop(); // こうやって書くことが出来ない&lt;/span&gt;
&lt;span class="synType"&gt;int&lt;/span&gt; n = st.top();
st.pop();
&lt;/pre&gt;

			&lt;p&gt;これについてずっと不満を覚えていたのですが、最近 &lt;a href="http://www.amazon.co.jp/dp/4894712709" target="_blank"&gt;Exceptional C++&lt;/a&gt; を読んで、なぜ void になっているのか、というのを知りました。&lt;/p&gt;

			&lt;br&gt;

			&lt;p&gt;pop() が void になっている理由は、例外安全を保証するためだそうです。&lt;/p&gt;
			&lt;br&gt;

			&lt;p&gt;例えば T を返す pop() メソッドの実装は、次のように書くことが出来ます。&lt;/p&gt;
&lt;pre class="syntax-highlight"&gt;
T pop()
{
    assert(size_ &amp;gt; &lt;span class="synConstant"&gt;0&lt;/span&gt;);

    &lt;span class="synType"&gt;size_t&lt;/span&gt; index = size_ - &lt;span class="synConstant"&gt;1&lt;/span&gt;; &lt;span class="synComment"&gt;// 1&lt;/span&gt;

    T value = ptr_[index];    &lt;span class="synComment"&gt;// 2&lt;/span&gt;
    Destruct(&amp;amp;ptr_[index]);   &lt;span class="synComment"&gt;// 3&lt;/span&gt;
    size_--;                  &lt;span class="synComment"&gt;// 4&lt;/span&gt;
    &lt;span class="synStatement"&gt;return&lt;/span&gt; value;             &lt;span class="synComment"&gt;// 5&lt;/span&gt;

}
&lt;/pre&gt;

			&lt;p&gt;T のコピーコンストラクタが例外を投げる可能性がある場合、2 と 5 で例外が発生する可能性があります。&lt;/p&gt;
			&lt;p&gt;例外が発生しても呼び出し前の状態を保持する程度の安全性を保証する場合、例えば 2 で例外が発生しても size_ は変更されていないので安全です。&lt;/p&gt;
			&lt;p&gt;しかし、5 で例外が発生した場合、size_ は既に変更されているので、これは例外安全とは言えません。&lt;/p&gt;
			&lt;br&gt;

			&lt;p&gt;例外仕様は設計に影響します。&lt;/p&gt;

			&lt;p&gt;例外安全を考えると、std::stack&amp;lt;&amp;gt; が pop() で T を返すことは不可能なのです。&lt;/p&gt;
			&lt;p&gt;なので、pop() は void とし、T&amp; を返す top() というメソッドでスタックの先頭への参照を返してもらう必要があるのです。&lt;/p&gt;
			&lt;br&gt;

			&lt;br&gt;

			&lt;p&gt;例外って難しいです...。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/melt/aggbug/134634.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>melt</dc:creator><title>[C++]PostMessageT</title><link>http://blogs.wankuma.com/melt/archive/2008/04/15/133156.aspx</link><pubDate>Tue, 15 Apr 2008 10:50:00 GMT</pubDate><guid>http://blogs.wankuma.com/melt/archive/2008/04/15/133156.aspx</guid><wfw:comment>http://blogs.wankuma.com/melt/comments/133156.aspx</wfw:comment><comments>http://blogs.wankuma.com/melt/archive/2008/04/15/133156.aspx#Feedback</comments><slash:comments>29</slash:comments><wfw:commentRss>http://blogs.wankuma.com/melt/comments/commentRss/133156.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/melt/services/trackbacks/133156.aspx</trackback:ping><description>			&lt;p&gt;PostMessage をするとき、引数を LPARAM と WPARAM にキャストするのですが、数が多い場合はキャストするのがどうも面倒です。&lt;/p&gt;
			&lt;p&gt;ということでこんなのを作ってみました。&lt;/p&gt;
&lt;pre class="syntax-highlight"&gt;

&lt;span class="synType"&gt;template&lt;/span&gt;&amp;lt;&lt;span class="synType"&gt;class&lt;/span&gt; WParam, &lt;span class="synType"&gt;class&lt;/span&gt; LParam&amp;gt;
&lt;span class="synType"&gt;inline&lt;/span&gt; BOOL PostMessageT(HWND hWnd, UINT uMsg, WParam wParam, LParam lParam)
{
    &lt;span class="synType"&gt;return&lt;/span&gt; ::PostMessage(hWnd, uMsg, (WPARAM)wParam, (LPARAM)lParam);
}
&lt;span class="synType"&gt;template&lt;/span&gt;&amp;lt;&lt;span class="synType"&gt;class&lt;/span&gt; WParam, &lt;span class="synType"&gt;class&lt;/span&gt; LParam&amp;gt;
&lt;span class="synType"&gt;inline&lt;/span&gt; BOOL SendMessageT(HWND hWnd, UINT uMsg, WParam wParam, LParam lParam)
{
    &lt;span class="synType"&gt;return&lt;/span&gt; ::SendMessage(hWnd, uMsg, (WPARAM)wParam, (LPARAM)lParam);
}
&lt;/pre&gt;

			&lt;p&gt;WPARAM や LPARAM への C スタイルでの変換が可能なら、キャストせずに PostMessage, SendMessage できます。&lt;/p&gt;

&lt;pre class="syntax-highlight"&gt;
SendMessageT(hCtrl, CB_ADDSTRING, &lt;span class="synConstant"&gt;0&lt;/span&gt;, TEXT(&lt;span class="synConstant"&gt;&amp;quot;hoge&amp;quot;&lt;/span&gt;));

Hoge hoge;
&lt;span class="synType"&gt;enum&lt;/span&gt; EValue { value = &lt;span class="synConstant"&gt;100&lt;/span&gt; };
PostMessageT(hWnd, WM_USER + &lt;span class="synConstant"&gt;100&lt;/span&gt;, value, &amp;amp;hoge);
&lt;/pre&gt;

			&lt;p&gt;自分の周りの人には好評でした……正直微妙な気分でしたが。&lt;/p&gt;
			&lt;p&gt;下回りならまだしも、上の方でバリバリに WindowsAPI を直接叩くのは勘弁して下さい……。&lt;/p&gt;
&lt;img src ="http://blogs.wankuma.com/melt/aggbug/133156.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>melt</dc:creator><title>即物的参加</title><link>http://blogs.wankuma.com/melt/archive/2008/04/11/132749.aspx</link><pubDate>Fri, 11 Apr 2008 16:00:00 GMT</pubDate><guid>http://blogs.wankuma.com/melt/archive/2008/04/11/132749.aspx</guid><wfw:comment>http://blogs.wankuma.com/melt/comments/132749.aspx</wfw:comment><comments>http://blogs.wankuma.com/melt/archive/2008/04/11/132749.aspx#Feedback</comments><slash:comments>13</slash:comments><wfw:commentRss>http://blogs.wankuma.com/melt/comments/commentRss/132749.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/melt/services/trackbacks/132749.aspx</trackback:ping><description>			&lt;p&gt;&lt;a href="http://blogs.wankuma.com/episteme/archive/2008/04/11/132731.aspx" target="_blank"&gt;Visual Studio 2008 Standard Edition がもらえる&lt;/a&gt;と聞いて、思わず申し込んでしまいました。&lt;/p&gt;
			&lt;p&gt;4/15 は人数いっぱいだったので 4/16 に登録しました。&lt;/p&gt;

			&lt;br&gt;

			&lt;p&gt;とりあえずレベルは 200 ということなので、あまり気構えずに、&lt;/p&gt;
			&lt;ul&gt;
				&lt;li&gt;10:00-10:50 VD-24 ここから始める！ Windows Vista の活用術&lt;/li&gt;
				&lt;li&gt;11:10-12:00 VD-25 新しい Office で仕事を改善 2007 Office sysetem で実現する理想のワークスタイル&lt;/li&gt;
				&lt;li&gt;13:20-14:10 NA-36 強化されたセキュアでハイパフォーマンスな PHP の実行環境とその実装方法&lt;/li&gt;

				&lt;li&gt;14:30-15:20 NA-37 "次世代 Web" を攻略せよ！ Silverlight &amp; ASP.NET Futures&lt;/li&gt;
				&lt;li&gt;16:00-16:50 NA-38 Visual Studio 2008 を活用したチーム開発のベストプラクティス&lt;/li&gt;
				&lt;li&gt;17:10-18:00 NA-39 Visual Studio 2008 による実践的パフォーマンス チューニング &amp; テスト&lt;/li&gt;
			&lt;/ul&gt;
			&lt;p&gt;この辺に参加してみようかなと思います。&lt;/p&gt;
			&lt;br&gt;

			&lt;p&gt;さて、今から休み申請してきます。通るかなぁ……。&lt;/p&gt;
&lt;img src ="http://blogs.wankuma.com/melt/aggbug/132749.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>melt</dc:creator><title>[C++]interruptible thread</title><link>http://blogs.wankuma.com/melt/archive/2008/03/31/130641.aspx</link><pubDate>Mon, 31 Mar 2008 10:40:00 GMT</pubDate><guid>http://blogs.wankuma.com/melt/archive/2008/03/31/130641.aspx</guid><wfw:comment>http://blogs.wankuma.com/melt/comments/130641.aspx</wfw:comment><comments>http://blogs.wankuma.com/melt/archive/2008/03/31/130641.aspx#Feedback</comments><slash:comments>17</slash:comments><wfw:commentRss>http://blogs.wankuma.com/melt/comments/commentRss/130641.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/melt/services/trackbacks/130641.aspx</trackback:ping><description>			&lt;p&gt;&lt;a href="http://www.boost.org/users/news/version_1_35_0" target="_blank"&gt;Boost 1.35.0&lt;/a&gt; がリリースされたらしいという話を聞いて、どんだけパワーアップしたんだろと覗いていたところ、Boost.Thread に対する変更があったみたいです。&lt;/p&gt;
			&lt;br&gt;

			&lt;p&gt;で、その詳細を読んでみると……。&lt;/p&gt;
			&lt;blockquote&gt;
			&lt;p&gt;Threads can be interrupted at interruption points.&lt;/p&gt;
			&lt;/blockquote&gt;
			&lt;p&gt;interrupted 機構ｷﾀ━━━━(ﾟ∀ﾟ)━━━━!!&lt;/p&gt;
			&lt;p&gt;こいつが無いと join や wait や sleep で待っているスレッドを安全に終了させるのがかなり面倒だったので、かなり嬉しいです。&lt;/p&gt;

			&lt;br&gt;

			&lt;p&gt;他にも面白そうな変更があれこれ。at_thread_exit() とか、1.34.1 の TSS の内部実装を見て、この機構欲しいと思ってたらほんとに実装されてました。Boost.Thread 始まりすぎです。&lt;/p&gt;
			&lt;p&gt;今のプロジェクトでは 1.34.1 を使ってますが、次のプロジェクトでは 1.35.0 を使えるように打診してみるしか。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/melt/aggbug/130641.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>