Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.047 c
2-1162252341
Warining
2006-10-31 02:52
2006.11.19
Почему возникает такое предупреждение ?


15-1162275186
@!!ex
2006-10-31 09:13
2006.11.19
GetTickCount под досом


4-1152249262
MN
2006-07-07 09:14
2006.11.19
Как менять всплывающую подсказку программы в трее


4-1149152948
Mr tray
2006-06-01 13:09
2006.11.19
Хук на активизацию окон


15-1162303585
Crazybeaver
2006-10-31 17:06
2006.11.19
Чудеса на виражах. Каким образом выполнена эта технология?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский