E2010 不兼容的类型: 'string' 和 'PWideChar'

4

因此,我正在尝试在ShellExecute中使用变量,但在编译时总是会得到以下错误:[DCC Error] Unit1.pas(44): E2010 Incompatible types: 'string' and 'PWideChar'

我只有两个变量,它们都是字符串ssidpass 出现错误的行:ShellExecute(0, nil, 'cmd.exe', '/c netsh wlan set hostednetwork ssid=' + ssid 'key=' + pass, nil, HIDE_WINDOW);

如果你已经注意到了,我正在努力制作一个使用cmd设置、停止和启动热点的程序。如果我使用这一行 ShellExecute(0, nil, 'cmd.exe', '/c netsh wlan set hostednetwork ssid=VirtualRouter key=12345678', nil, HIDE_WINDOW); 就可以正常工作。

项目代码:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ShellAPI, StdCtrls;

type
  TSSID = class(TForm)
    lblSSID: TLabel;
    edtSSID: TEdit;
    lblPASS: TLabel;
    edtPASS: TEdit;
    btnConfig: TButton;
    btnStart: TButton;
    btnRestart: TButton;
    btnStop: TButton;
    lblname: TLabel;
    lblname2: TLabel;
    procedure btnConfigClick(Sender: TObject);
    procedure btnStartClick(Sender: TObject);
    procedure btnStopClick(Sender: TObject);
    procedure btnRestartClick(Sender: TObject);
  private
    { Private declarations }
  public
    ssid: String;
    pass: String;
  end;

var
  SSID: TSSID;

implementation

{$R *.dfm}

procedure TSSID.btnConfigClick(Sender: TObject);
begin
  ssid := edtSSID.Text;
  pass := edtPASS.Text;
  lblname2. Caption := edtSSID.Text;
  ShellExecute(0, nil, 'cmd.exe', '/c netsh wlan set hostednetwork ssid=' + ssid 'key=' + pass, nil, HIDE_WINDOW);
end;

procedure TSSID.btnRestartClick(Sender: TObject);
begin

  ShellExecute(0, nil, 'cmd.exe', '/c netsh wlan stop hostednetwork', nil, HIDE_WINDOW);
  ShellExecute(0, nil, 'cmd.exe', '/c netsh wlan start hostednetwork', nil, HIDE_WINDOW);

end;

procedure TSSID.btnStartClick(Sender: TObject);
begin

  ShellExecute(0, nil, 'cmd.exe', '/c netsh wlan start hostednetwork', nil, HIDE_WINDOW);

end;

procedure TSSID.btnStopClick(Sender: TObject);
begin

  ShellExecute(0, nil, 'cmd.exe', '/c netsh wlan stop hostednetwork', nil, HIDE_WINDOW);

end;

end.

需要帮忙吗?谢谢。是的,我是delphi的新手,所以如果我尝试做的事情不起作用,请原谅。


2
似乎通过 cmd.exe 驱动这个程序有些奇怪,为什么不直接调用 netsh.exe 呢?我知道 ShellExecute 很方便,但如果你想获得任何失败诊断信息,使用 CreateProcess 会有更好的体验。 - David Heffernan
1个回答

3
'/c netsh wlan set hostednetwork ssid=' + said 'key=' + pass

这里缺少一个 +,你的意思应该是:
'/c netsh wlan set hostednetwork ssid=' + said + 'key=' + pass

这个表达式是字符串类型,但 ShellExecute 需要提供一个 PChar 类型的参数。请将您的字符串转换为 PChar,方法如下:
PChar('/c netsh wlan set hostednetwork ssid=' + ssid + 'key=' + pass)

所以我现在将它更改为 ShellExecute(0, nil, 'cmd.exe', PChar('/c netsh wlan set hostednetwork ssid=' + ssid 'key=' + pass), nil, HIDE_WINDOW); 现在我的问题是 [DCC Error] Unit1.pas(44): E2029 ')' expected but string constant found 我在 Delphi 中还是新手,抱歉。 - Adriaan
1
好的,没问题,还有一个错误。仔细看看你的原始代码。它缺少一个 +,看看我的更新答案。如果你读了错误信息,你本可以解决这个问题的。不要轻易放弃! - David Heffernan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接