【问题标题】:E2010 Incompatible types: 'string' and 'PWideChar'E2010 不兼容的类型:“字符串”和“PWideChar”
【发布时间】:2016-08-11 15:04:47
【问题描述】:

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

我只有 2 个变量,它们都是字符串 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.

有什么帮助吗?谢谢。是的,我是德尔福的新手,如果我想做的事情不起作用,我很抱歉

【问题讨论】:

  • 通过cmd.exe 驱动这个似乎很奇怪,为什么不直接打电话给netsh.exe。我知道ShellExecute 很方便,但是如果您想获得任何故障诊断,使用CreateProcess 将获得更好的体验。

标签: delphi


【解决方案1】:
'/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还是很新很抱歉。
  • 是的,还有一个错误。仔细查看您的原始代码。它缺少一个 + 并查看我的更新答案。如果您阅读了错误消息,您可能已经解决了这个问题。不要轻易放弃!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多