【问题标题】:Cmd String to PAnsiChar in delphidelphi中的Cmd字符串到PAnsiChar
【发布时间】:2015-03-28 16:05:24
【问题描述】:

我对 Delphi 比较陌生,我想制作一个使用 ShellExecute 命令的快速应用程序。

我想在编辑框中使用字符串值来添加到命令行中,以便在应用程序之外执行处理工作。

一切正常,但我收到错误:

“不兼容的类型:String 和 PAnsiChar”

我尝试使用以下方法进行转换: Variable := PAnsiChar(AnsiString(editbox.Text),但无济于事。

谁能帮我解决这个问题。

【问题讨论】:

  • 您确定您使用的是 Delphi 7 而不是 XE7? Delphi 7 具有与PAnsiChar 兼容的8 位字符串类型,而Delphi XE7 具有与PChar 兼容的16 位字符串类型。
  • 我使用的是 Delphi 7 (2002)

标签: string delphi delphi-7


【解决方案1】:

在 Delphi 7 中,它是 PChar 的简单类型转换,它已经是 PAnsiChar

PChar(YourStringVariable);

PChar('Some text here');  // Cast not needed; demonstration only
PChar('C:\' + AFileName); // Cast needed because of variable use

ShellExecute一起使用:

AFile := 'C:\MyDir\Readme.txt';
Res :=   ShellExecute(0, 'open', PChar(AFile),
                      nil, nil, SW_NORMAL )

【讨论】:

  • 没有必要强制转换文字,我认为最好不要
  • @David:我认为这样做没有任何害处,因为 API 调用清楚地要求 PChar,并且演员表清楚地表明您正在传递一个。它还避免了新程序员以后遇到的问题,他们不明白为什么'open' 有效,但'C:\ADir\' + AFileName 不会。不过,经过编辑以澄清和显示差异。谢谢。
  • 我也不认为有什么害处。我个人认为尽可能避免强制转换更清楚。
  • 除非你真的需要动词'open',否则通常最好只传递nil。这将使用文件类型的默认动词。并非每种文件类型都支持动词“打开”。
  • @maddog550:我帮不了你,因为你 a) 没有提供你正在使用的实际代码,b) 你没有给我们错误信息与该代码相关的上下文。如果您需要帮助,edit 您的问题是提供导致问题的确切代码(包括变量声明),您看到的确切错误消息(包括确定哪条线路导致它)。我们只能根据您提供的信息提供帮助,这就是我们所做的。你需要更多帮助吗?提供更多详细信息。
【解决方案2】:

当你无法编译它时,它怎么能正常工作?

您发布的代码太少,无法确定哪里出了问题,但您肯定有太多的类型转换。 AnsiChar 是只能存储单个字符的类型,在这里没有意义。

如果 VariablePAnsiChar 那么你应该使用:

Variable := PAnsiChar(editbox.Text)

【讨论】:

  • 对不起,这是我的错误。我确实尝试过你的方法,但我一直收到错误。
  • 您能否编辑您的问题以显示更多代码。 Variable是什么类型,ShellExecute怎么称呼
猜你喜欢
  • 2010-09-21
  • 2011-01-01
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 2013-02-07
  • 1970-01-01
相关资源
最近更新 更多