IDE编译成功,但dcc32写入:Error: E2010 不兼容类型:'Integer'和'NativeInt'。

7

Delphi XE2 Update 3集成开发环境可以成功编译项目,但是dcc32.exe会输出以下信息:

Embarcadero Delphi for Win32 compiler version 22.0
Copyright (c) 1983,2010 Embarcadero Technologies, Inc.
ehshelprouter.pas(137) Error: E2010 Incompatible types: 'Integer' and 'NativeInt'
ehs_reg.pas(68) Fatal: F2063 Could not compile used unit 'ehshelprouter.pas'

为什么?第137行是:

Application.OnHelp := OnRouteHelp; // function OnRouteHelp(Command: Word; Data: NativeInt; var CallHelp: Boolean): Boolean;

感谢您的帮助!

ehshelprouter.pas文件的第137行周围的代码实际上是什么样子的? - Remy Lebeau
展示代码!!我敢打赌 TControl.Tag 参与了其中。 - David Heffernan
3个回答

4

请检查相关代码行。如果它提示两个本应兼容的类型不兼容,则说明这里发生了比简单赋值更复杂的事情。如果我要猜测,可能会有一个函数指针传递,并且API已经发生了变化。尝试检查该情况...


1

你是否确认在命令行中没有使用Win64编译?(即验证实际调用的是dcc32.exe)。如果是这种情况,NativeInt就是64位,导致错误的触发也是正常的。

此外,你是使用-B选项进行全编译(如:(c:\program files\embarcadero\rad studio\9.0\bin\dcc32.exe -$O- -$W+ --no-config-B-Q...)),还是使用-M选项进行简单编译(如:(c:\program files\embarcadero\rad studio\9.0\bin\dcc32.exe -$O- -$W+ --no-config-M-Q...))?

我建议你尝试清除所有dcu文件以查看是否有所帮助。

由于从IDE中可以工作,请尝试捕获消息区域中显示的命令行,并尝试在控制台中执行完全相同的命令行。


如何在dcc32.exe中禁用64位? - Dmitry
更新了我的回答。Dcc32.exe应该只输出32位代码,但这真的是预期/好的dcc32.exe吗? - Francesca

1
你可能错误地使用了较旧的dcc32.exe(可能是Delphi XE?)。请检查您的PATH设置或提供XE2 dcc32.exe的完整路径以进行编译。 XE2应该显示此版本信息:

Embarcadero Delphi for Win32编译器版本23.0


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接