Форум: "Основная";
Текущий архив: 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