var
  C: array [1..3] of Char;
  
begin
    ShellExecute(handle, 'open',c, nil,nil, SW_SHOWNORMAL);
end

解决方案 »

  1.   

    我想c数组定义应该从0开始,因为PChar相当于C中的char*,数组都是以0开始。
    最好直接用字符串转化了,最简单了
    var
      s: string;  s := 'notepad.exe';
      ShellExecute(0, 'open', PChar(s), nil,nil, SW_SHOWNORMAL);
      

  2.   

    我的源码是这样:
    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;
      

  3.   

    那么需要把array [1..3] of Char改为array [0..2] of Char