Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.12.27;
Скачать: CL | DM;

Вниз

Pointer на Unicode-строку   Найти похожие ветки 

 
Psycho ©   (2009-01-09 20:41) [0]

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

Delphi 2009, Windows Vista


 
DVM ©   (2009-01-09 21:43) [1]


> Psycho ©   (09.01.09 20:41)
>
> Нужен Pointer на строку

PChar - что не катит?


 
Psycho ©   (2009-01-09 21:48) [2]

в Delphi 2009 говорит Expression illegal in evaluation


 
Psycho ©   (2009-01-09 21:49) [3]

то есть evaluator


 
DVM ©   (2009-01-09 21:49) [4]


> в Delphi 2009 говорит Expression illegal in evaluation

На что именно говорит?


 
Psycho ©   (2009-01-09 21:53) [5]

На PChar(files[listnumber]), во время дебага. Ошибку не выдаёт


 
Psycho ©   (2009-01-09 21:53) [6]

где files - TStringList


 
DVM ©   (2009-01-09 21:58) [7]


> Psycho ©   (09.01.09 21:53) [5]

procedure TForm1.Button1Click(Sender: TObject);
var
 List: TStringList;
 s: string;
 p: pchar;
begin
 List := TStringList.Create;
 try
   List.Add("а");
   List.Add("б");
   List.Add("в");
   s := List[2];
   p := PChar(s);
 finally
   List.Free;
 end;
end;


 
DVM ©   (2009-01-09 22:00) [8]

Да и так тоже у меня нет никаких предупреждений:

procedure TForm1.Button1Click(Sender: TObject);
var
 List: TStringList;
 p: pchar;
begin
 List := TStringList.Create;
 try
   List.Add("а");
   List.Add("б");
   List.Add("в");
   p := PChar(List[2]);
 finally
   List.Free;
 end;
end;


 
Psycho ©   (2009-01-09 22:03) [9]

ну это не как предупреждение идёт, а всплывает при наведении на место после этого выражения, когда выполнение на паузе


 
DVM ©   (2009-01-09 22:10) [10]


> а всплывает при наведении на место после этого выражения,
>  когда выполнение на паузе

у меня не всплывает, хотя мое "место после выражения" весьма вероятно отличается от твоего.


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

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


 
DVM ©   (2009-01-09 22:36) [12]


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


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

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


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

да


 
Psycho ©   (2009-01-09 22:46) [13]

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


 
DVM ©   (2009-01-09 22:54) [14]


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

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

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

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


 
Psycho ©   (2009-01-09 23:20) [15]

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


 
DVM ©   (2009-01-09 23:33) [16]


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

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


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

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


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

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


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


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


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

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


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

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


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

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


 
Eraser ©   (2009-01-10 01:12) [21]

> [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 14:56) [22]


> 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 курсе, так что к нормальному виду код стараюсь приводить по ходу


 
KSergey ©   (2009-01-10 15:32) [23]

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

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

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


 
KSergey ©   (2009-01-10 15:42) [24]

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

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


 
Eraser ©   (2009-01-10 16:24) [25]

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


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

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

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

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


 
Eraser ©   (2009-01-10 16:25) [26]

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

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


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


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

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


 
Psycho ©   (2009-01-10 17:24) [28]


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

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

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

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


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

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


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

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


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

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


 
Psycho ©   (2009-01-10 19:07) [29]

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


 
KSergey ©   (2009-01-11 10:33) [30]

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

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

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

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



Страницы: 1 вся ветка

Текущий архив: 2009.12.27;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.019 c
2-1257442024
V
2009-11-05 20:27
2009.12.27
TBitmap и Array of Byte


8-1200828685
artkil
2008-01-20 14:31
2009.12.27
Способы вывода видео на экран


2-1257858648
Тимофей123
2009-11-10 16:10
2009.12.27
smoothresize


2-1257668589
Zheksonz
2009-11-08 11:23
2009.12.27
XPManifest, цвет компонента


15-1256506209
Юрий
2009-10-26 00:30
2009.12.27
С днем рождения ! 26 октября 2009 понедельник