◀ANSI版開発トップへ
  • 3617 メモ:LVITEM
    • 3626 Re: メモ:LVITEM
  • [3617] メモ:LVITEM みく 2004年06月05日 09:54


    LVITEM.pszTextはLPSTR型です。

    CPropComMacro.cpp:246など
    sItem.pszText = m_pShareData->m_MacroTable[index].m_bRel
    oadWhenExecute ? "on" : "off";
    だとconstになってしまうので厳密にはエラーになります。
    • [3626] Re: メモ:LVITEM もか 2004年06月07日 01:46

      ListView_InsertItem/LVM_INSERTITEMは、const LV_ITEM FAR*とはなっているけど、constになるのはポインタ値(const TCHAR* const)で、定義上は中身をWin側で書き換える可能性ありってことですね。
      Win32APIは、IN/OUTやconst/非constに関していいかげんすぎだよなあ。

      VC6 Proに付属しているMFCのソース(初めて見た...)に、
      int CListCtrl::InsertItem(UINT nMask, int nItem, LPCTSTR lpszItem, UINT nState, UINT nStateMask,
      int nImage, LPARAM lParam)
      LVITEM item;
      ...
      item.pszText = (LPTSTR)lpszItem;
      という物があります。もっとも、MFCもたいして当てにならないようで....
      気持ち悪いけど、まあ、いいにしましょう。
      #なんでconst_castでないんだ?古いから?

      ちなみに、プログラミング言語C++第3版によれば、「文字列リテラルは、char*に代入できる。(中略) C、C++の以前の定義では、文字列リテラルの型はchar*だった」そうです。
      ワイド文字列リテラルに関しては、const wchar_t[]型とは書いてありますが、wchar_t*に代入可能かは判りませんでした(^_^;