Форум: "Начинающим";
Текущий архив: 2006.11.19;
Скачать: [xml.tar.bz2];
ВнизСовместимость PAnsiChar и String Найти похожие ветки
← →
eowl (2006-11-05 07:24) [0]Как обеспечить совместимость этих двух типов? Если быть точнее то я всего лишь хочу вывести число, целое или с правающей точкой, через функцию
MessageBox(hwnd, text:PansiChar, caption:PAnsiChar, type:cardinal);
Но я не нашел фунции для перевода числа в этот тип.
← →
Ketmar © (2006-11-05 07:33) [1]в "надмозги".
PChar(string_literal_or_variable). в данном случае.
← →
Джо © (2006-11-05 07:37) [2]Не нужно никаких функций ("в данном случае", как сказал коллега). Предлагаю конструкцию:
S: string;
...
@S[1].
Это если возжелать, чтобы врагам было неприятно читать исходники. А если не желать такого, то [1]. Да и там нету функции. И слава богу.
← →
Ketmar © (2006-11-05 07:38) [3]индекс опаснее. хотя и шустрее. %-)
← →
Джо © (2006-11-05 07:48) [4]Да, если посмотреть, что это "Основная" (как странно), то можно еще и приоткрыть страшную тайну, что я наглым образом ввожу в заблуждение, утверждая, что приведение типа PChar не приведет к вызову функции. Приведет и даже по памяти скажу, что это будет LStrToPChar. Впрочем, и мой вариант также чреват UniqueStr, опять же, по памяти. Не думаю, впрочем, что это все сколь-нибудь существенно для данного вопроса, хотя и указывает направление, куда пытливый ум вопрошающего может взглянуть со всевозрастающим изумлением... 8-)
← →
eowl (2006-11-05 07:57) [5]Никак не могу привыкнуть, как шустро здесь отвечают.. :) :) Только от монитора отвернулся.
Я как раз собирался попробовать PСhar() :).
@S[1] - никогда бы наверно сам не додумался :)
Спасиба вообщем!
← →
Джо © (2006-11-05 07:59) [6]> Спасиба вообщем!
Да воооообщем, поооожалуйста. :D
← →
Loginov Dmitry © (2006-11-05 08:40) [7]eowl (05.11.06 7:57) [5]
@S[1] - никогда бы наверно сам не додумался
И не нужно оно. Вовсе.
← →
Ketmar © (2006-11-05 08:44) [8]>[5] eowl 5-Nov-2006, 07:57
>@S[1] - никогда бы наверно сам не додумался :)
и не надо. дяденька шутит.
← →
Anatoly Podgoretsky © (2006-11-05 11:34) [9]
> Джо © (05.11.06 07:37) [2]
Вообще то конструция опасная, для пустой строки вызывала AV в некоторых версиях Дельфи. Сейчас вроде устранили. PChar функция безопасная, но чуть дольше.
Кстати и работа будет различаться,
Для @S[1] будет передан nil, для PChar(S) будет передан указатель на пустую строку. А функции Виндоус различаются многообразием, некоторые съедят и то и то, некоторые будут вести себя по разному, а некоторые могут и свихнуться, что им передали не строку.
← →
eowl (2006-11-05 12:50) [10]Раз, уж вы все здесь и тема оказалась в разделе для начинающих :), я не буду бояться задавать глупые вопросы :D.
Объясните мне за одним...,
функция Pchar - где ее объявление?? Это вообще функция? В модуле system, вроде все пересмотрел, нету. Ну не все конечно :). Я многое не понимаю в синтаксисе, стандартных модулей, там и вправду много удивительного и странного, чего вообщем то я и не видел больше нигде, кроме как там :) :).
>
> направление, куда пытливый ум вопрошающего может взглянуть
> со всевозрастающим изумлением... 8-)
Оно правда!
← →
sniknik © (2006-11-05 13:23) [11]> функция Pchar - где ее объявление?? Это вообще функция?
нет, это тип, а для приведения к этому типу вызывается функция см [4].
понять что и как можно включив галочку в проекте в опциях "use debug dcus", и пройти трассировкой по F7 в интересующее тебя действие. (а не искать неизвестно чего)
← →
Anatoly Podgoretsky © (2006-11-05 15:00) [12]> eowl (05.11.2006 12:50:10) [10]
Это сложнее - это и функция, если есть что то в скобках и это и тип, если
используется в объявление. Описана вроде в модуле System, но в модуле System
многое имеет другие имена, а что именно вызывать знает компилятор.
← →
Ketmar © (2006-11-05 15:07) [13]>[9] Anatoly Podgoretsky(c) 5-Nov-2006, 11:34
>Для @S[1] будет передан nil
не знаю, приобрела ли данная конструкция смысл в D10 (если да -- то авторов компилятора сжечь на медленном огне), но ещё в D7 спокойно давала AV. что логично: откуда в пустой строке возьмётся первый элемент???
← →
guav © (2006-11-05 15:28) [14]> [13] Ketmar © (05.11.06 15:07)
Катит и в D7.
Адрес элемента = адрес массива + смещение элемента, для первого смещение равно 0.
← →
Anatoly Podgoretsky © (2006-11-05 15:39) [15]> guav (05.11.2006 15:28:14) [14]
В Д7 может быть и катит, но в Д2/Д3 это выдавала AV, индекс мог быть любой,
было обращение к памяти, а чего ожидать от обращения к адресу 0
← →
Ketmar © (2006-11-05 15:43) [16]>[14] guav(c) 5-Nov-2006, 15:28
>Катит и в D7.
да. работает. странно. узнаю, кто это сделал -- пристрелю. %-) какой может быть адрес элемента в несуществующем массиве? это даже круче идеального сферического коня в вакууме.
← →
guav © (2006-11-05 15:43) [17]> [15] Anatoly Podgoretsky © (05.11.06 15:39)
Ну это что-то вроде передачи PInteger(nil)^ в качестве var параметра.
В есте передачи к памяти не обращаются, потому AV нет, но разыменованние вроде как есть. Может в D2-D3 и этот приём не прошел бы.
Разумеется, лучше приведения PChar и string, причём у себя никаких PChar.
← →
guav © (2006-11-05 15:45) [18]> [16] Ketmar © (05.11.06 15:43)
специально никто думаю не делал, просто так получилось:
> Адрес элемента = адрес массива + смещение элемента, для
> первого смещение равно 0.
А пустой массив располагается по адресу 0, а фактическое разыменование не делается.
← →
Anatoly Podgoretsky © (2006-11-05 15:55) [19]> guav (05.11.2006 15:45:18) [18]
> А пустой массив располагается по адресу 0, а фактическое разыменование не
> делается.
Уверен, а если включить проверку диапазонов?
Еще раз говорю подобная конструкция вызывала АВ в ранних версиях, после они
пошли на поводу у некоторых программистов и переделали немного компилятор.
Но это смешно обращение по индексу к несуществующему массиву. И кроме того,
как писалось ранее поведение некоторых функций АПИ не допускает передачу
пустого параметра, а обязательно требует передачу строки/массива пускай
пустого. Функция PChar решает эту проблему и даже более, она запрещает
писать в пустой массив, чего не скажешь про программы на других языка, потом
удивляются неожиданному поведению программы. При том трудно уловимому,
поскольку касается особых условий и касается некоторых функций.
← →
Anatoly Podgoretsky © (2006-11-05 15:57) [20]> guav (05.11.2006 15:45:18) [18]
Я кстати тоже в свое время страдал от этого @S[1] пока не получил по зубам
от системы, теперь или всегда пишу PChar или в случае гарантированого
массива of char не пишу, но там и индекс не требуется указывать.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.11.19;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.041 c