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

Вниз

pchar   Найти похожие ветки 

 
Muskat   (2003-06-11 13:54) [0]

procedure Test1(pc: PChar);
begin
if pc <> "" then
ShowMessage("!");
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Test1("");
end;

При вызове процедуры Test1 с параметром pc = "", срабатывает ShowMessage("!");

Почему???


 
Юрий Федоров ©   (2003-06-11 13:58) [1]

Ты сравниваешь два PChar (два Pointer"а по сути);
Они имеют разные значения, так как указывают на разные области памяти.
Для сравнения их содержимого используй StrComp


 
jel ©   (2003-06-11 13:59) [2]

Может быть попробовать на nil проверять, а не на ""?


 
Spawn ©   (2003-06-11 14:01) [3]

Ну ты возьми и проверь напрмер, длину, т.е.
if Length(pc)<>0 then


 
Muskat   (2003-06-11 14:02) [4]


> jel © (11.06.03 13:59)

Нет не поможет.

> Юрий Федоров © (11.06.03 13:58)

Спасибо.


 
han_malign ©   (2003-06-11 14:05) [5]

pc<>"" - читай pc<>nil (такое уж соглашение в Delphi, что бы лишних AV не было)
а константа "" - имеет вполне определенный адрес и фактическую длинну 1 (PChar("")[0]=#0)

мне приходилось извращаться из-за этого:
function WaitExec(const aAppName,aCmdLine: string): DWORD;
var _pi: PROCESS_INFORMATION;
_si: STARTUPINFO;
pc: PChar;
begin
FillChar(_si,sizeof(_si),0);
_si.cb:=sizeof(_si);
_si.wShowWindow:=SW_SHOWDEFAULT;
FillChar(_pi,sizeof(_pi),0);
if(aAppName="")then pc:=nil else pc:=PChar(aAppName);
if(CreateProcess( pc,PChar(aCmdLine),nil,nil,false,0,nil,nil,_si,_pi))
then Result:=NO_ERROR else Result:=GetLastError;
- иначе "путь к приложению не найден", хотя параметр опционный, но преверяется на nil, а не на #0


 
VMcL ©   (2003-06-11 16:28) [6]

>han_malign © (11.06.03 14:05)
>такое уж соглашение в Delphi, что бы лишних AV не было

Какое отношение CreateProcess имеет к соглашениям в Delphi?

Справка по CreateProcess:
The lpApplicationName parameter can be NULL. In that case, the module name must be the first white space-delimited token in the lpCommandLine string.

Именно поэтому CreateProcess не понимает пустой PChar (""), и нужно передавать nil.


 
han_malign ©   (2003-06-11 16:44) [7]

sapienti sat


 
VMcL ©   (2003-06-11 16:54) [8]

>han_malign © (11.06.03 16:44)

Выпендрился? Молодец.

P. S. Главный вопрос: кто "умный"? :)



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

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

Наверх




Память: 0.48 MB
Время: 0.017 c
3-84007
Жук
2003-05-30 16:14
2003.06.26
Select из ХП


1-84237
Shirson
2003-06-11 14:38
2003.06.26
Запуск другой программы и ожидаение её завершения.


1-84136
REA
2003-06-10 15:16
2003.06.26
Чтение компонента


3-83896
Grey_g
2003-06-03 06:47
2003.06.26
BDE dll


14-84518
Красная майка
2003-06-03 11:21
2003.06.26
Очередная встреча Мастаков в Москве. Запись участников.