gpt4 book ai didi

delphi - 如何从 delphi 2010 应用程序调用 MS-DOS 批处理程序

转载 作者:行者123 更新时间:2023-12-03 18:53:44 26 4
gpt4 key购买 nike

我正在尝试编写一个从 Delphi 2010 应用程序中执行 DOS 批处理程序的例程。我在 Delphi 6 中工作的旧例程不断给我错误消息:-

“Project1.exe 引发异常类 EAccessViolation,并带有消息‘在模块 'kernel32.dll' 中地址 7C82F29C 的访问冲突。写入地址 004A3B82”。

这是我在 Delphi 6 中工作的旧例程:-

Procedure TForm1.BatchProgramCall;  
var
StartInfo: TStartUpInfo;
ProcInfo: TProcessInformation;
createOK: Boolean;
begin
FillChar(StartInfo, SizeOf(TStartUpInfo), #0);
FillChar(ProcInfo, SizeOf(TProcessInformation), #0);
StartInfo.cb := SizeOf(TStartUpInfo);
StartInfo.dwFlags := STARTF_USESHOWWINDOW;
StartInfo.wShowWindow := SW_SHOWMINIMIZED;

createOK := CreateProcess(Nil,PCHAR('SOMEBATCHPROGRAM.BAT'),Nil, Nil, false,
CREATE_NEW_PROCESS_GROUP+HIGH_PRIORITY_CLASS,
NIL, NIL, STARTINFO, PROCINFO);
if createOK then
waitForSingleObject(PROCINFO.HPROCESS, Infinite);
end;

请让我知道我做错了什么,或者有更好的方法来解决这个问题......
非常感谢。

最佳答案

您可以阅读有关 CreateProcess 和 unicode 问题的这些文章。

  • Delphi in a Unicode World Part III: Unicodifying Your Code
  • CreateProcess Declaration

  • 此函数的 Unicode 版本 CreateProcessW 可以修改此字符串的内容。因此,此参数不能是指向只读内存的指针(例如 const 变量或文字字符串)。如果此参数是一个常量字符串,该函数可能会导致访问冲突。

    您可以使用 UniqueString作为解决问题的解决方法。
    Procedure TForm1.BatchProgramCall;  
    var
    StartInfo: TStartUpInfo;
    ProcInfo: TProcessInformation;
    createOK: Boolean;
    sMyBat: string;

    begin
    FillChar(StartInfo, SizeOf(TStartUpInfo), #0);
    FillChar(ProcInfo, SizeOf(TProcessInformation), #0);
    StartInfo.cb := SizeOf(TStartUpInfo);
    StartInfo.dwFlags := STARTF_USESHOWWINDOW;
    StartInfo.wShowWindow := SW_SHOWMINIMIZED;

    sMyBat :='SOMEBATCHPROGRAM.BAT';
    UniqueString(sMyBat); //this make the magic.
    createOK := CreateProcess(Nil,pchar(sMyBat),Nil, Nil, false,
    CREATE_NEW_PROCESS_GROUP+HIGH_PRIORITY_CLASS,
    NIL, NIL, STARTINFO, PROCINFO);
    if createOK then
    waitForSingleObject(PROCINFO.HPROCESS, Infinite);
    end;

    关于delphi - 如何从 delphi 2010 应用程序调用 MS-DOS 批处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1754389/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com