【问题标题】:After ForceDirectories statement, Delphi exits the procedure在 ForceDirectories 语句之后,Delphi 退出程序
【发布时间】:2014-07-19 09:49:10
【问题描述】:

我有这个简单的程序但是我发现了一个问题,在调试的时候我发现Delphi执行ForceDirectories成功但是直接跳到程序的末尾没有执行它后面的行,这是为什么?

var
export_dir: string;
grd_idx: integer;
begin
  export_dir := 'c:\app1\export\';
  SysUtils.ForceDirectories(export_dir);

  showmessage('this line executed then it jump to the end !!');

  for grd_idx := 0 to pred(pagecontrol1.ActivePage.ComponentCount) do begin

    if (pagecontrol1.ActivePage.components[grd_idx] is Tmycomp) then
  ExportToExcel(export_dir+(pagecontrol1.ActivePage.components[grd_idx] as Tmycomp).Name, (pagecontrol1.ActivePage.components[grd_idx] as Tmycomp),
    true, true, true, 'xlsx');

  end;

end;

我使用的是 Delphi XE5,64 位项目

更新: 我注意到在 showmessage 有一个用于无效断点的 x 图标而不是用于有效断点的红色小图标之后,我还在该行上放置了断点,所以我从程序的开头开始跟踪,我可以确认从以 @ 开头的行开始987654323@循环它没有被执行。

ExportToExcel 是用于将数据导出到 Excel 的内置程序。

【问题讨论】:

  • 我刚刚在 XE4 上使用 64 位可执行文件进行了测试,并且代码按预期运行。您能否创建一个完整的 SSCCE 控制台应用程序来复制该行为?
  • 什么版本的 Windows,您是否以管理员身份运行?如果C:\app1文件夹不存在,必须先创建export文件夹才能创建,非admin用户不能在Windows Vista及以上开启UAC的情况下从C:的根目录下创建文件夹.您没有检查 ForceDirectories 的返回值(或者您可以简单地使用调试 DCU 构建并进入调用以查看失败的原因)。
  • @KenWhite Win7 64bit 作为管理员,文件夹创建成功,我逐步完成了从该行跳转到end;的代码!!!
  • 我无法复制它(见我的回答)。同样,我的建议是使用调试 DCU 构建并进入对 ForceDirectories 的调用以查看发生了什么。
  • 在您下定决心并为您的问题提供必要的信息之前,我不会检查任何内容。我不知道 ExportToExcel 可能会做什么,您要转换为 TmycompTmycomp 首先是什么,而且您还不清楚问题出在哪里。

标签: delphi


【解决方案1】:

很有可能pagecontrol1.ActivePage.ComponentCount=0 和循环内的代码从未执行过。

附:如果调试器甚至没有尝试进入循环的第一行,则很可能您已打开优化。检查项目属性“编译/代码生成”(并确保使用构建配置“调试”)。

【讨论】:

    猜你喜欢
    • 2015-03-06
    • 1970-01-01
    • 2019-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-09
    相关资源
    最近更新 更多