トップ «前の日記(2004-03-11) 最新 次の日記(2004-03-13)» 編集

日々の破片

Subscribe with livedoor Reader
著作一覧

2004-03-12

_ VB -> COM -> VC++

なひさんのコメントを読んで思い出したまずいコード。
HRESULT Foo(VARIANT_BOOL bar)
{
    if (bar == TRUE)
    {
        // VBからは絶対実行されない。でもVC++からは呼べる
    }
    return S_OK;
}
まずいのは、呼び出す側のVC++プログラマも
IFoo* ifoo;
CoCreateInstance(CLSID_Foo, .... (void**)&ifoo);
ifoo->Foo(TRUE);
ifoo->Release();
なんて書いていたから。(確か、VBで作成したActiveXコントロールで、If bar = True Thenとか書いてあるとひっかっかたような気もするが不確実)
正しくは、
HRESULT Foo(VARIANT_BOOL bar)
{
    if (bar) // 勘違いしているVC++から呼ばれてもOK
    {
        // 正しく実行される
    }
    return S_OK;
}
で、呼び出しは
IFoo* ifoo;
CoCreateInstance(CLSID_Foo, .... (void**)&ifoo);
ifoo->Foo(VARIANT_TRUE);
ifoo->Release();
っていうか、Win32APIでも!FALSEが不定値というのは多いから、TRUEというdefineを無しにしておいて、
if (!Win32APICall(...)) // 失敗の判定
{
 ...
}
if (Win32APICall(...)) // 成功の判定
{
 ...
}
というのをベストプラクティスとしておきゃ良いのだが、なぜか、真かどうかを同値検査で判定するコードを書く人っているのだな、これが。

_ Subversion

これだけそこら中で見かけるのだから、よほどモノが良いか、よほど宣伝が良いかのどちらかだろう。で、当然、後者のはずはありえない。だから、機会を見つけて移行しようかな。

Subversion によるバージョン管理

移行ツール次第のような。

本日のツッコミ(全6件) [ツッコミを入れる]
_ 青木 (2004-03-12 08:01)

みんなCVSに愛想が尽きたと言う説もあります。<br>ちなみに個人的にCVSで一番嫌なのは、(安全に)<br>サーバを立てるのがめちゃくちゃ難しいことです。

_ arton (2004-03-12 08:37)

なるほど。安全かどうかって視点はイントラネットでしか使ってないから欠落してたなぁ。

_ ただただし (2004-03-12 09:11)

CVSサーバが難しいから、sf.netが成立してるんですよ(断言)<br>おれもSubversion使おうかなー

_ babie (2004-03-12 12:13)

うぅっ「真かどうかを同値検査で判定するコードを書く人」です。COMとかではまずいのですね。<br>「true以外は全部falseじゃー」っていう勢いで書いているのですが...。

_ kjana (2004-03-12 13:02)

なんかちょっと前に MFC の何かが BOOL の引数を TRUE か FALSE だと assert()<br>してたせいでいらない苦労をした記憶....

_ arton (2004-03-12 20:40)

ありそうだなぁ。あの会社、API作ってる個々のサブシステムの連中と個々の言語製品作ってる連中で、全く意思の統一が取れてなさそうだし。


2003|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|

ジェズイットを見習え