所以我们有一个第三方工具,我们无法重新编译,但它使用这个ParamStr(索引:整数)来获取命令行参数.我已经尝试了我可以在互联网上找到的所有东西,但它不接受双引号字符.我使用了转义字符等,并创建了一个测试应用程序来简化测试过程并将问题归结为此功能.
有没有人通过这个函数通过命令行参数成功传递双引号?
编辑:我在下面发布了我的测试应用程序.processfromcommandline函数来自第三方库.
对此的示例输入将是这样的:
"file1.adb file2.adb -p4THISISAPASSWORD"
Run Code Online (Sandbox Code Playgroud)
密码直接在-p4之后.我们的密码是"加密的",看起来更像这样
file1.adb file2.adb -p4$/.;}{3"aG13Sz/"9@;.'
Run Code Online (Sandbox Code Playgroud)
测试应用程序使用ShowMessage输出它获得的字符串,这样你就可以看到delphi正在做什么.所以我的输入将是一些东西
unit Main;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, clipbrd;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
FParams: Boolean;
FAbort: Boolean;
FAppPath: String;
FLogPath: String;
FSuccess: Boolean;
FSourceFile: String;
FDestFile: String;
FParamCount: Integer;
FPassword4: String;
FKeyFile4: String;
FIVFile4: String;
FPassword5: String;
FKeyFile5: String;
FIVFile5: String;
procedure ProcessFromCommandLine;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.ProcessFromCommandLine;
var bTo4: boolean; …Run Code Online (Sandbox Code Playgroud) 所以我下面有一些非常简单的代码。我在多个 onclick 事件中使用此函数来传递 TMenuItems 的标题。
procedure TForm1.BtnClick(Sender: TObject);
begin
TestFrm.MyVar:= TMenuItem(Sender).Caption;
InteractiveSchedulerFrm.ShowModal;
end;
Run Code Online (Sandbox Code Playgroud)
然而,这样做的结果是 TestFrm.MyVar 字段最终包含了一个原来不存在的 & 符号,并且它总是位于看似随机的位置。
我通过替换字符串中的所有&符号来临时修复了该问题,但我最好奇是什么导致&符号被放置在字符串中。
例子:
TMenuItem(Sender).Caption = '测试';
TestFrm.MyVar = 'TE&ST' 或 '&TEST' 等
delphi ×2