![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Pointer на Unicode-строку
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