Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2009.12.27;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.007 c
2-1257749650
Alex_C
2009-11-09 09:54
2009.12.27
Скрыть кнопку на панели задач


2-1257502260
kyn66
2009-11-06 13:11
2009.12.27
Останавливается информация о ходе выполнения процесса


15-1256379385
DVM
2009-10-24 14:16
2009.12.27
Посоветуйте как лучше поступить.


15-1256595468
Германн
2009-10-27 01:17
2009.12.27
Ищу эксперта.


1-1231711857
Илья_
2009-01-12 01:10
2009.12.27
Установка собственного шрифта





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский