Delphi 为什么这段代码要声明一个不同的类型?

Delphi 为什么这段代码要声明一个不同的类型?,delphi,delphi-xe,static-typing,Delphi,Delphi Xe,Static Typing,ShlObj.pas行9922(与Delphi XE中相同): 在这里回答大卫·赫弗南的评论,因为我认为这概述了一个相关的背景,你为什么要问这个问题?问题。 Windows API源回调例程的过程类型被声明为类型别名(您知道,规范API名称+Pascalised别名,有时反之亦然)。例如Windows.PIMAGE\u TLS\u回调,ShlObj.LPFNDFMCALLBACK等。上面显示的类型声明是一个例外。这就是为什么我要问:-)这只是一种迫使我们程序员使用TFNBFFCallBack而

ShlObj.pas行9922(与Delphi XE中相同):


在这里回答大卫·赫弗南的评论,因为我认为这概述了一个相关的背景,你为什么要问这个问题?问题。
Windows API源回调例程的过程类型被声明为类型别名(您知道,规范API名称+Pascalised别名,有时反之亦然)。例如
Windows.PIMAGE\u TLS\u回调
ShlObj.LPFNDFMCALLBACK
等。上面显示的类型声明是一个例外。这就是为什么我要问:-)

这只是一种迫使我们程序员使用TFNBFFCallBack而不是BFFCALLBACK的方法。如果它是一个别名,我们可以将其用于浏览信息结构。在不同的平台上,TFNBFFCallBack可能指向与BFFCALLBACK不同的内容。

请为Pascalish类型标识等细微问题提供适当的标记。我认为delphi+delphi xe标记可以。我怀疑任何其他标签都不会对任何人有多大帮助。你在该单元的其他地方看到不同类型的使用了吗?还是在Windows.pas中?我想这是法普公司的一个变化吧@DavidHeffernan,问得好!我已在问题正文中添加了对您的评论的答复。@DavidHeffernan删除的答案是错误的,因为您可以将过程类型作为
var
传递。我以前从未这样做过,但这是可能的,
type
prefix对过程类型的影响与对其他类型的影响相同。
type
  BFFCALLBACK = function(Wnd: HWND; uMsg: UINT; lParam, lpData: LPARAM): Integer stdcall;
  TFNBFFCallBack = type BFFCALLBACK;
  {$EXTERNALSYM BFFCALLBACK}