Форум: "Основная";
Текущий архив: 2003.06.26;
Скачать: [xml.tar.bz2];
Вниз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;
- иначе "путь к приложению не найден", хотя параметр опционный, но преверяется на nil, а не на #0
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;
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.043 c