是否可以在每次调用不同单元的函数时添加单元名称?

时间:2009-01-15 15:54:26

标签: delphi

我经常遇到的一个问题是,我将在我的uses子句中包含' Windows ',然后我会为某些人添加' JwaWinBase '特定电话。

然而,'Windows'单元中的许多功能与JwaWinBase中的相​​同,我开始在我的主单元中出现错误,直到我通过预先挂起正确的单元来修复所有呼叫名字,像这样:

旧:

  • CreateProcessAsUser(...)

新:

  • Windows.CreateProcessAsUser(...)
  • JwaWinBase.CreateProcessAsUser(...)

我想知道的是,是否有办法让单位名称自动预先设定为每次调用另一个单位的功能?这样,在我将JwaWinBase添加到我的uses子句之前,我可以将'Windows'单元名称预先设置为任何函数调用。然后添加JwaWinBase不会给我任何错误。

我目前正在使用Delphi 2007。

4 个答案:

答案 0 :(得分:8)

没有。

但是,函数调用的处理顺序与uses子句中的相反,所以如果你有这个:

uses
  Windows, JwaWinBase;

...默认会调用Jwa函数。但是,如果你颠倒它们:

uses
  JwaWinBase, Windows;

...它应默认调用Windows函数,您可以根据需要为Jwa函数添加前提。

答案 1 :(得分:3)

如果您确实需要基于每个例程的解析,您可以尝试使用内联转发器:

procedure Blah; inline;
begin
  Windows.Blah;
end;

procedure Blubb; inline;
begin
  JwaWinBase.Blubb;
end;

// later:
procedure UseThem;
begin
  Blah; // calls Windows.Blah
  Blubb; // calls JwaWinBase.Blubb
end;

在实施部分的开头(完全未经测试: - ))。

答案 2 :(得分:2)

也许只需在uses子句中切换两个单元的顺序就足够了。

答案 3 :(得分:2)

如果使用CodeRush(D7及之前版本)或Castalia等编辑器,甚至使用D2009的模板功能,您可以创建扩展到所需内容的模板。然后,您可以在使用部分中保留Windows,jwaWinBase顺序。您可以将jcpau设置为扩展为jwaWinBase.CreateProcessAsUser,同时cpau扩展为CreateProcessAsUser或Windows.CreateProcessAsUser,具体取决于您的首选项。您只需要完成jwaWinBase中的各种功能,并为它们制作模板以确保安全。

否则,我认为它是根据具体情况进行搜索和替换的。