2009-03-02

文字列置き換え

WhereNowで取得した座標をパラメータにして特定のURLを開きたいというご要望を頂きました。
あらかじめ「http://maps.live.com/default.aspx?v=2&cp=%lat~%lng&lvl=15」のような設定をしておいて%lat、%lngを置き換えればいいのですね。
 
ところが最近、何もコードを書いてなかったので単純な文字列の置き換えで手が止まってしまいました。
 
真面目に書こうとも思ったのですが、結局CStringに逃げる事に...。
TCHAR->CStringは = で渡すだけ、CString->TCHARはLPCTSTRでキャストするだけ(でいいはずですよね?)というお手軽さです。
 
static VOID OpenCustomURL()
{
    SHELLEXECUTEINFO    sei             = {0};
    CString             strUrl          = g_szCustomURL;
    TCHAR               szLatitude[32]  = _T(""),
                        szLongitude[32] = _T("");

    wsprintf(szLatitude,  _T("%f"), g_dblLatitude);
    wsprintf(szLongitude, _T("%f"), g_dblLongitude);
    strUrl.Replace(_T("%lat"), szLatitude);
    strUrl.Replace(_T("%lng"), szLongitude);

    sei.cbSize = sizeof(sei);
    //sei.fMask  = SEE_MASK_NOCLOSEPROCESS;
    sei.fMask  = 0;
    sei.hwnd   = NULL;
    sei.lpVerb = _T("open");
    sei.lpFile = (LPCTSTR)strUrl;
    ShellExecuteEx(&sei);
}

 
肝心の機能ですが、今いる部屋が圏外の為 ちゃんとテストできていません(笑
明日にでも外で試してみます。
 

2 件のコメント:

元E7 さんのコメント...

CStringは、相手側がLPCTSTRなら明示的キャストは不要かと。

それだけでなく、printf系(_stprintf、TRACE等)に渡す時も明示的キャストは不要
らしいんですが、どうも自分は昔のMFCのヘルプ(CString::Format)に書かれていた、
「オプションの引数として文字列を渡すときは、LPCTSTRに明示的にキャストしてください。」
を引き摺ってるようで、ついキャストしてしまうんですよねぇ。(^^;)
今はもうこの文言も出てないので、そろそろキャストやめちゃおうかなぁ…。

まぁ、相手側がLPTSTRの場合はちょっと長たらしくて嫌いなんですが
(LPTSTR)(LPCTSTR)って明示的キャストが必要ですね。

kazuaki さんのコメント...

元E7さん こんにちは。
お返事が遅くなってすみません。

確かにキャストしてないようなサンプルもあるようですね。
MFCとかはほとんど経験がないので勉強になりました。

Cでプログラム書くのは自分の勉強のためも兼ねているのであまり便利な機能を使うのは本末転倒ですが、さすがに文字列の処理は面倒なのでCStringのお世話になりそうです。