Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Pointer на Unicode-строку


Страницы:   1 2

Psycho ©   (2009-01-09 20:41:00) 

Нужен Pointer на строку, но его не получается взять никак, кроме PString(AnsiString(StringList[i])), а это потеря Unicode-данных. А если не написать AnsiString(x), то PString, работая как PUnicodeString, вместо пути к файлу возвращает кучу фигни с иероглифами и пр. Почему? Попытки писать всякие другие комбинации типов приводят к тому, что возвращается Pointer на пустую строку.

Delphi 2009, Windows Vista


KSergey   (2009-01-11 10:33:00) [1]

> Psycho ©   (10.01.09 19:07) [29]
> > чувак вроде доволен остался
>
> но ему не были нужны Unicode-имена, вот его и удоволетворило
> преобразование в Ansi

Не правда, чувак удовлетворился BASS_UNICODE

> Значит нелегальность выражения не повод для волнения)

о чем я  и писал, собственно.
Это ж только отладчик его показать не может, на самом деле оно вполне себе вычисляется.


Psycho   (2009-01-10 19:07:00) [2]

Ура! BASS_UNICODE решил проблему, просто мне надо было сразу прочитать справку про него и пихать его не в BASS_Init, а в BASS_StreamCreateFile... Значит нелегальность выражения не повод для волнения) Простите за столько потраченного времени...


Psycho   (2009-01-10 17:24:00) [3]


> если выполнить эту строку в отдадчике, а потом подвести
> курсор на переменную f (или лучше в watch окно ее) - то
> не показывает значение?

не совсем: какое-то значение показывает, но, судя по результатам функции, куда это дело передаётся, неправильное. "Expression illegal in evaluator" выдаётся если сделать Inspect выражения PChar(files[listnumber])

> чувак вроде доволен остался

но ему не были нужны Unicode-имена, вот его и удоволетворило преобразование в Ansi


> Попытки писать всякие другие комбинации типов приводят к
> тому, что возвращается Pointer на пустую строку.

Обнаружил, что пустая строка в результате Inspect'а не значит, что возвращается не то...


> плохо.
> прийдешь - сразу линейкой по пальцам перешибут )

Ну хорошо, спасибо за науку)


> Трудно сказать, поскольку код не приведен.

Ну немножко приведено:
> http://www.ii4.ru/images/342049PChar.jpg


Anatoly Podgoretsky   (2009-01-10 17:00:00) [4]


> А разве у меня всё так плохо с правилами оформления кода?
> ..

Трудно сказать, поскольку код не приведен.


Eraser   (2009-01-10 16:25:00) [5]

> прийдешь - сразу линейкой по пальцам перешибут

прийдешь в команду имел ввиду.


Eraser   (2009-01-10 16:24:00) [6]

> [22] Psycho ©   (10.01.09 14:56)


> ну да, PChar - теперь PWideChar, но как это меняет дело?

меняет дело то, что PChat в Д2009 это PWideChar, но PAnsiChar никто не отменял.

> А разве у меня всё так плохо с правилами оформления кода?

плохо.
прийдешь - сразу линейкой по пальцам перешибут ) кто ж называет локальные переменные, начиная с буквы f - это издевательство. Далее почему все с маленькой буквы, в т.ч. идентификаторы типа и некоторые функции, еще несколько недочетов. в общем ссылку дал я, там все подробно описано.


KSergey   (2009-01-10 15:42:00) [7]

странно, куда я ответ еще один запостил??
короче, повторять лень, вот так вот - первые 5 ссылок - самое что надо, в одной даже про D2009 именно речь, чувак вроде доволен остался.

http://www.google.ru/search?hl=ru&q=delphi+BASS_StreamCreateFile&lr=&aq=f&oq=


KSergey   (2009-01-10 15:32:00) [8]

Т.е. беда только в том, что отладчик не показывает значение верно? Так это не беда. Если скомпилировалось - адрес однозначно определяется, причем верно.

> Psycho ©   (10.01.09 00:14) [17]
>  с получением которого проблема (expression illegal выдаётся даже если
> выписать f:=PChar(...) отдельной строкой)

Не верю.
Т.е. если выполнить эту строку в отдадчике, а потом подвести курсор на переменную f (или лучше в watch окно ее) - то не показывает значение? Такое может быть только в случае, если переменная более не используется и не отключена оптимизация кода.


Psycho   (2009-01-10 14:56:00) [9]


> dn.codegear.com/article/38446
> dn.codegear.com/article/38582
> dn.codegear.com/article/38703
>

Ещё вчера читал эти статьи, но полного просветления не достиг: ну да, PChar - теперь PWideChar, но как это меняет дело?


> и особенно www.delphikingdom.com/asp/viewitem.asp?catalogid=802

А разве у меня всё так плохо с правилами оформления кода?.. Это я начинал писать ещё в школе, а правилам структурного программирования нас стали учить только сейчас, на 1 курсе, так что к нормальному виду код стараюсь приводить по ходу


Eraser   (2009-01-10 01:12:00) [10]

> [0] Psycho ©   (09.01.09 20:41)

читать
dn.codegear.com/article/38446
dn.codegear.com/article/38582
dn.codegear.com/article/38703

и особенно www.delphikingdom.com/asp/viewitem.asp?catalogid=802

до полного просветления )


Psycho   (2009-01-10 00:24:00) [11]

или в системе у люблого файла с Unicode-именем есть "второе имя" (ну не досовское, а Ansi'шное)?


Psycho   (2009-01-10 00:22:00) [12]

ну это я собственно пока что и делаю, а параллельно пытаюсь найти способ работать с Unicode-именами, которые при использовании Ansi становятся недействительными


DVM   (2009-01-10 00:18:00) [13]


> Psycho ©   (10.01.09 00:14) [17]


> А функции нужна не строка, а указатель на неё, с получением
> которого проблема

нет никакой проблемы, преобразуй Unicode строку в Ansi строку, это возможно в большинстве случаев.


Psycho   (2009-01-10 00:14:00) [14]

http://www.un4seen.com/forum/?topic=9340.0- тут они закончили на том, что работает через PAnsiChar, то есть без юникода. А функции нужна не строка, а указатель на неё, с получением которого проблема (expression illegal выдаётся даже если выписать f:=PChar(...) отдельной строкой)


DVM   (2009-01-09 23:33:00) [15]


> но ведь в функцию уже передаётся не то что надо

С чего ты взял? В функцию передается то что надо - unicode строка.


> отя действительно, функция из dll, значит на неё нововведения
> 2009 могут не действовать

BASS_UNICODE - такой флаг там есть, bass.dll вероятно поддерживает UNICODE, но заголовочный файл на DELPHI возможно требует корректировки.


Psycho   (2009-01-09 23:20:00) [16]

но ведь в функцию уже передаётся не то что надо, уже expression illegal, ещё до передачи в функцию. хотя действительно, функция из dll, значит на неё нововведения 2009 могут не действовать... надеюсь, в новой версии библиотеки сработает


DVM   (2009-01-09 22:54:00) [17]


> Psycho ©   (09.01.09 22:46) [13]

так бы сразу и говорил. Дело то не в PChar(files[listnumber])

А в следующей строке!!!! Не знаю, что там у тебя за функция BASS_*****
Но она поддерживает UNICODE?

Если нет, то надо преобразовывать UNICODE строку к ANSI строке


Psycho   (2009-01-09 22:46:00) [18]

Вобщем во избежание недопониманий (хотя я как раз ничего не понимаю...):
http://www.ii4.ru/images/342049PChar.jpg
http://www.ii4.ru/images/526756PString.jpg


DVM   (2009-01-09 22:36:00) [19]


> Psycho ©   (09.01.09 22:20) [11]


> ну я имел в виду закрывающую скобку и пара пикселей справа
> от неё

у меня там во всплывающей подсказке отображается то, что и ожидается, а именно 'а' в моем случае.


> ну у Вас именно Delphi 2009?

да


Psycho   (2009-01-09 22:20:00) [20]

ну я имел в виду закрывающую скобку и пара пикселей справа от неё) ну у Вас именно Delphi 2009? В 2007 у меня всё работало именно через PChar


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо