我正在使用Delphi 5命令行编译器来进行构建。构建不会报告任何错误,但它也不会生成EXE文件。
我可以确认以下内容:
EDIT 虽然我在Delphi 5中遇到过这种情况,但并不是特定于该版本。 Delphi Bug List至少在D4-D6中确认了这个问题。
答案 0 :(得分:5)
您可以使用SysInternale / Microsoft的ProcessMonitor来调查.exe
创建。运行procmon.exe
并使用“路径”“包含”(您的exe名称)添加过滤器,然后添加“包含”。
在我的环境中编译t.pas
给了:
12:09:58,1927245 DCC32.EXE 3596 CreateFile C:\tmp\t.exe SUCCESS Desired Access: Generic Write, Read Attributes, Disposition: OverwriteIf, Options: Synchronous IO Non-Alert, Non-Directory File, Attributes: N, ShareMode: None, AllocationSize: 0, OpenResult: Overwritten
12:09:58,1928116 DCC32.EXE 3596 CreateFile C:\tmp\t.exe SUCCESS Desired Access: Read Attributes, Synchronize, Disposition: Open, Options: Synchronous IO Non-Alert, Complete If Oplocked, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a, OpenResult: Opened
12:09:58,1928281 DCC32.EXE 3596 QueryFileInternalInformationFile C:\tmp\t.exe SUCCESS IndexNumber: 0x46b00000000c296
12:09:58,1928376 DCC32.EXE 3596 CloseFile C:\tmp\t.exe SUCCESS
12:09:58,1961352 DCC32.EXE 3596 WriteFile C:\tmp\t.exe SUCCESS Offset: 0, Length: 19 968
....
可能是dcc32
中的错误?
答案 1 :(得分:2)
经过长时间的调查,我已经找到了解决问题的方法。
{$ObjExportAll ON}
。您可以使用以下简单项目测试错误:
program TestDCC32ObjExportAll;
{$OBJEXPORTALL ON}
begin
end;
幸运的是我们根本不使用BCB,所以我只是在任何地方都禁用了指令。
EDIT
精彩的资源The Delphi Bug List报告说Delphi 4,5和6中确认存在该问题。遗憾的是,此后Delphi Bug List已经停止。 :(
答案 2 :(得分:1)
当我们有一些流氓.dcu文件(我们确实有一个.pas文件)时,我记得在Delphi 5时代(可能是Delphi 4或Delphi 6)中的某些地方有类似的东西。
在构建解决问题之前删除.DCU文件。
另外:防病毒软件可以为您的系统做与时间相关的非常糟糕的事情;做到了这一点:我的大多数开发系统都是在没有防病毒的虚拟机中出于这个原因。
尝试在干净的机器上重现您的Delphi 5 dcc32问题(只需Windows和您需要的Delphi组件,仅此而已)。
如果可行,请使用Process Monitor查看MichałNiklas建议的那些机器之间的差异。
答案 3 :(得分:1)
我认为这可能是一个非常着名的问题(对于那些与D5合作的人)。
例如,FinalBuilder在“Build Delphi project”操作中包含“使用Delphi 5编译器bug的解决方法”操作,该操作使用不同的选项构建项目两次 - 特别是在dcc32不创建exe时创建exe(根据帮助文件) )。
Delphi 4或Delphi 6没有类似的选项,所以我猜它是在Delphi 5中引入的,并在Delphi 6中得到修复。