63 / 64 / 11
Регистрация: 27.02.2013
Сообщений: 1,116
|
|
1 | |
Сконвертить PCHAR в AnsiString18.07.2014, 22:45. Показов 3860. Ответов 23
Метки нет (Все метки)
как сконвертить PCHAR в AnsiString? или просто присвоить переменной типа AnsiString переменную типа PCHAR (может у этого класса есть какой то метод для этого...)
0
|
18.07.2014, 22:45 | |
Ответы с готовыми решениями:
23
Как перевести текст из AnsiString (в формате UTF8) в AnsiString формата Windows-1251? Как сконвертить png в ico? Где/как лучше сконвертить траф? Как сконвертить формат даты VBA в С#? |
Почетный модератор
5850 / 2861 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
|
||||||||||||||||||||||||||
29.07.2014, 15:23 | 21 | |||||||||||||||||||||||||
А вообще вопрос интересный.
Не последний, а последние, не кратные двум:
В справке даже описан случай:
Но все же вертаясь к вопросу GetHelp. Вот такой код:
Вопрос: почему?
0
|
29.07.2014, 16:19 | 22 | |||||
Вот поэтому:
Как бы, класс этот устроен так, что внутренние указатели на данные у оригинала и немодифицированной копии одинаковые для экономии памяти. Но тут может быть заковырка - чтобы обеспечить закрытость внутренних данных эдита, метод геттера для свойства Text может как-то создавать полностью независимую копию и возвращать уже ее. Тогда получаем уже вовсе временный объект и любые указатели на его части могут оказаться невалидными в любой момент. Как-то так...
0
|
Почетный модератор
5850 / 2861 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
30.07.2014, 15:44 | 23 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Ну это-то понятно - надо было мне так сказать и продолжить тупить.
Но заместо этого я убил кучу времени, чтобы понять о чем говорит славный BRcr во фразе , когда вроде бы мы ничего и не копируем. Да. Все это так: при попытке изменить содержимое строки сеттером, произойдет копирование измененного значения в новую область памяти. При присваивании же нескольким строкам значения одной из них, физически память не будет расходоваться на новые копии, так как они будут просто ссылаться на эту строку, просто будет увеличиваться счетчик ссылок у данной конкретной записи. Как это работает
У класса, в частности AnsiString, данные, непосредственна строка, расположены сразу после структуры, описывающей эту строку:
Зная его устройство легко посчитать смещение, которое необходимо вычесть из адреса первого элемента строки, чтобы узнать значение счетчика ссылок:
Всего существует три случая:
Собственно коды, демонстрирующие выше сказанное: Для первого случая:
Для второго случая:
Для третьего случая:
Теперь про изменение самого значения, общего для всех. Не даром я вначале сообщения выделил про изменение строки через сеттер класса. При обращении через него все копируется, все хорошо. Но если врукопашную добраться до этой самой искомой строки и набедокурить в ней, то и у всех зависимых строк так же все естественно поменяется:
Возвращаясь к нашим баранам:
Из UniqueString тут тоже не выстрелить. Да и не имеет смысла это, как видно выше. Следовательно мой вопрос остается в силе:
0
|
30.07.2014, 21:27 | 24 | |||||
Обстоятельно. Чтоб у меня стока времени было...
Однако, на вопрос дать ответ пока затрудняюсь - не смог воспроизвести ошибку.
Попробую еще перехватчики на конструкторы копирования поставить, может, нам String сам расскажет, что с ним в эдите делают?..
0
|
30.07.2014, 21:27 | |
30.07.2014, 21:27 | |
Помогаю со студенческими работами здесь
24
PCHAR в String Pchar из dll Преобразование в Pchar Работа с Pchar Pchar и освобождение памяти Небезопасное использование PChar Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |