我想c数组定义应该从0开始,因为PChar相当于C中的char*,数组都是以0开始。 最好直接用字符串转化了,最简单了 var s: string; s := 'notepad.exe'; ShellExecute(0, 'open', PChar(s), nil,nil, SW_SHOWNORMAL);
我的源码是这样: procedure TForm1.NMUDP1DataReceived(Sender: TComponent; NumberBytes: Integer; FromIP: String; Port: Integer); var C: array [1..3] of Char; s: array [1..3] of Char; I: Integer;begin if NumberBytes <= 3 then begin NMUDP1.ReadBuffer(C, I); if ShellExecute(handle, 'open',c, nil,nil, SW_SHOWNORMAL)=SE_ERR_FNF then begin //s:='找不到c:dsfsdf这个目录'; NMUDP1.RemoteHost := '127.0.0.1'; NMUDP1.ReportLevel := Status_Basic; NMUDP1.LocalPort := 6668; NMUDP1.RemotePort := 6668; NMUDP1.SendBuffer('找不到c:dsfsdf这个目录',3); end //showmessage('找不到'+c+'这个目录'); Memo1.Lines.Add(C+': received '+IntToStr(I)+' bytes from '+FromIP+' on port '+IntToStr(Port)); end else Memo1.Lines.Add(IntToStr(I)+' bytes incoming, buffer too small');end;
最好直接用字符串转化了,最简单了
var
s: string; s := 'notepad.exe';
ShellExecute(0, 'open', PChar(s), nil,nil, SW_SHOWNORMAL);
procedure TForm1.NMUDP1DataReceived(Sender: TComponent;
NumberBytes: Integer; FromIP: String; Port: Integer);
var
C: array [1..3] of Char;
s: array [1..3] of Char;
I: Integer;begin
if NumberBytes <= 3 then
begin
NMUDP1.ReadBuffer(C, I);
if ShellExecute(handle, 'open',c, nil,nil, SW_SHOWNORMAL)=SE_ERR_FNF then
begin
//s:='找不到c:dsfsdf这个目录';
NMUDP1.RemoteHost := '127.0.0.1';
NMUDP1.ReportLevel := Status_Basic;
NMUDP1.LocalPort := 6668;
NMUDP1.RemotePort := 6668;
NMUDP1.SendBuffer('找不到c:dsfsdf这个目录',3);
end
//showmessage('找不到'+c+'这个目录');
Memo1.Lines.Add(C+': received '+IntToStr(I)+' bytes from '+FromIP+' on port '+IntToStr(Port));
end
else
Memo1.Lines.Add(IntToStr(I)+' bytes incoming, buffer too small');end;