разве Name не PAnsiChar?
Да. А как его в юникоде выдать?
Покажите объявление Name. во избежание ошибок.
String(AnsiString(Name))?
Не сдается
Утечку поймаешь, в delphi напрямую не рекомендовано такое приведение.
Нет здесь утечки. Да и рекомендации такой тоже нет
Рекомендация в самом delphi есть
а что вообще происходит точно?
С чего утечка? Сделается AnsiString потом UnicodeString, по выходу из блока освободится
Искать надо с телефона не удобно... в описании структуры строки такое замечание есть
потому что нет такой рекомендации. а такой прямой каст - это как раз способ погасит хинт, говоря о том, что ты понимаешь, что делаешь и о последствиях
Beware of these Constructs You should examine the following problematic code constructs: Casts that obscure the type: AnsiString(Pointer(foo)) Review for correctness: what was intended? Suspicious casts -- generate a warning: PChar(<AnsiString var>) PAnsiChar(<UnicodeString var>) Directly constructing, manipulating, or accessing string internal structures. Some, such as AnsiString, have changed internally, so this is unsafe. Use the StringRefCount, StringCodePage, StringElementSize, and other functions to get string information.
Вот еще фрагметик текста Если S изменяется на 'Something else', указатель P не будет изменён и будет продолжать указывать на 'C:\Test.exe'. Поскольку P не является строковой (в смысле String) ссылкой на этот текст, и у нас нет никакой другой переменной, ссылающейся на него, то его счётчик ссылок станет равным 0, и текст будет удалён из памяти. Это означает, что P теперь указывает на недоступную память (invalid memory). https://www.transl-gunsmoker.ru/2009/09/pchars.html
Это все мимо исходной темы
Обсуждают сегодня