Конференция "WinAPI" » Функция возвращает ссылку на строку.
 
  • Cobalt © (14.05.12 19:45) [0]
    http://msdn.microsoft.com/en-us/library/windows/desktop/bb775335%28v=vs.85%29.aspx
    Remarks

    If the HDI_TEXT flag is set in the mask member of the HDITEM structure, the control may change the pszText member of the structure to point to the new text instead of filling the buffer with the requested text. Applications should not assume that the text will always be placed in the requested buffer.

    Как принято в таких случаях обращаться с возвращенным значением указателя на строку?
    Оставлять так, не пытаясь освободить? (подозреваю, что функция банально возвращает указатель на "оригинальную строку" элемента (хранится же она где-то в памяти), а не её копию в пользовательский буфер)
  • Давайте будем жрать! (14.05.12 19:48) [1]
    Если выделял не ты и нигде не сказано освобождать, то не трожь. Оледб-шные функции, к примеру, явно рекомендуют освобождать память.
  • han_malign (18.05.12 12:51) [2]
    - это означает, что компонент может заменить твой указатель на буфер - на свой статический(например размещенный в TLS)...
    то есть:
    - неправильно:
    pszText = GetMem(260);
    HDM_GETITEM
    ...
    print(pszText);
    FreeMem(pszText);


    - неправильно
    p = GetMem(260);
    pszText = p;
    HDM_GETITEM
    ...
    print(p);
    FreeMem(p);


    - правильно
    p = GetMem(260);
    pszText = p;
    HDM_GETITEM
    ...
    print(pszText);
    FreeMem(p);


    - а проще:
    var _rgchGetItemBuf = array[0..260]of char;
    pszText = @_rgchGetItemBuf;
    HDM_GETITEM
    ...
    print(pszText);


    - главное помнить, что правильный текст лежит в pszText, а не в _rgchGetItemBuf...
  • han_malign (18.05.12 12:57) [3]
    на всякий случай(если кто не в теме):
    cchTextMax:= sizeof(_rgchGetItemBuf);

  • Омлет © (18.05.12 13:11) [4]

    > array[0..260]of char;

    Не 260, а MAX_PATH.
  • han_malign (18.05.12 13:42) [5]

    > Не 260, а MAX_PATH.


    ... Note that although the header control allows a string of any length to be stored as item text, only the first 260 TCHARs are displayed.
  • Омлет © (18.05.12 13:48) [6]

    > han_malign   (18.05.12 13:42) [5]

    Ну эти 260 не с потолка же они взяли?
  • имя (21.04.16 15:13) [7]
    Удалено модератором
 
Конференция "WinAPI" » Функция возвращает ссылку на строку.
Есть новые Нет новых   [118648   +59][b:0][p:0.001]