有时候Delphi似乎是区分大小写的 - "重载方法应该与祖先的大小写匹配"

8
今天我遇到了一个“奇怪”的提示:

覆盖的 xxxx 方法应该与祖先 yyyy 的情况相匹配。

解决方案是将方法名称声明为与祖先完全相同。我相信这是自Delphi.Net编译器以来一直存在的问题。
将方法名称声明为与祖先完全相同,可以使编译器“无声”。Delphi 2006及更高版本中是否还有其他“大小写敏感”的提示/警告?

4
它并不是真正的“区分大小写”,它只是说使用相同的大小写习惯是一个好习惯。 - Andreas Rejbrand
5
在 Delphi 中一直存在大小写敏感的问题,即设计时包中 Register 过程的名称。但是如果您弄错了它,系统不会提示或警告,您只会得到意料之外的结果(组件不会显示)。 - ain
也许在这个方法声明上方加上注释 // 请编译!(不要提示!) 会有所帮助 ;) - mjn
5
导入外部函数时,大小写敏感。 - David Heffernan
@mjn,如果我没记错的话,你可以用一个[disable hints-re-enable hints]块来包含这部分。然而,那个hack的丑陋让我有点恶心。 - Johan
1个回答

15

这是一个提示,旨在保护您的代码在与第三方代码协作时不受影响。
此提示是在引入 Delphi for .net 时引入的,因为其他一些 .net 平台是区分大小写的。

请注意,该提示并不意味着 Delphi 本身对大小写敏感。
仅在下面的第 1 点中,Delphi 本身是区分大小写的,第 2 点是 Delphi 编译器调用 Windows API 中区分大小写函数 GetProcAddress() 的方式所导致的副作用。

Delphi 中的大小写敏感行为

1-注册组件
我不知道还有其他任何大小写敏感的提示,但请注意,当您编写自己的组件并要将其注册时,您声明的注册函数必须像下面这样编写:

procedure Register;  <<-- Leading capital required.  

如果不这样做,Delphi将不会添加您的新组件。

2-导入外部函数

如David所述,当导入外部函数时,必须保留DLL中使用的确切大小写。

无法禁用单个提示
请注意,您无法禁用特定提示:可以禁用特定的Delphi提示吗?


3
技术上来说,Windows API 函数 GetProcAddress 区分大小写。 - Warren P

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