如何找到在MSDN中等效的Delphi函数?

3

微软开发人员网络(MSDN)充满了有用的文档函数,这些函数对于Windows应用程序开发人员来说是必不可少的学习和保持更新的。

例如,在这里的shellexecute函数是有很好的文档记录的(由Embarcadero Technologies翻译如下)。

function ShellExecute; external shell32 name 'ShellExecuteW';

然而,用于解释这些功能的语言是c/c++(没有抱怨或任何事情)。

要找到相应的功能等价物的位置(它是否存在是另一个问题)可能很难。

例如,我正在寻找此函数的等效物:

DWORD CreateIpNetEntry(
  _In_ PMIB_IPNETROW pArpEntry
);

现在每次遇到困难都来这里问我在哪里找到等价的内容是毫无意义的。所以我的问题是:

是否有一种方法可以知道在Delphi中是否有与MSDN中的C++函数等效/翻译,并且在哪里可以找到它们(单元)?


1
尝试使用JEDI headers(在这种情况下,使用JwaIpHlpApi.pas中的函数和JwaIpRtrMib.pas中使用的结构)。其中许多翻译原型比Delphi附带的更准确。 - Victoria
@Victoria 谢谢,这是我第一次听说它。 - Nasreddine Galfout
不用谢,同时也很抱歉。我误解了你的问题。 - Victoria
2
正如答案所述,grepping可以得到最终结果。但首先要给予该库的单元翻译一个机会:在MSDN的底部滚动并找到它所在的"Iphlpapi",将其粘贴到"uses"中,按下Ctrl+Enter,然后搜索该函数。 - Sertac Akyuz
@SertacAkyuz 工作得很好 - Nasreddine Galfout
2个回答

4

您可以通过在Delphi源文件夹中搜索来查找特定API函数是否已被翻译。

任何文件搜索工具都可以满足需要,包括内置的查找文件


“查找文件”对我来说已经很好用了多年。 - kobik
@kobik,“在文件中查找”是用来查找已包含的文件(或已包含的子目录中的文件)的。当然,这需要使用 Delphi 源文件。 - Victoria
1
没错,如果没有源代码,你就会陷入困境。但是如果你有源代码,那么这肯定是最可靠的方法。 - David Heffernan
1
@Victoria,我真的无法想象在没有源文件的情况下开发Delphi。因为这个原因,当我在.NET上开发时(需要不断使用反射),我真的很苦恼。 - kobik
@kobik,我也是。我只是试图解决试用爱好者的问题。也许最终会产生相反的效果。 - Victoria
我选择这个答案是因为当你有源代码时,它是最可靠的。另一个答案除了给出单元名称外,还给出了一些没有该函数的内容(我认为这是一个错误)。然而,我想指出@Sertac Akyuz提供的技巧(将c++单元名称粘贴到uses子句中并按Ctrl + Enter)也是一个行之有效的解决方案。 - Nasreddine Galfout

4
这在 查找单元 主题中有详细说明:

代码编辑器中编辑 Delphi 代码时,您可以使用查找单元重构对话框来定位并添加单位到您的代码中。当您在代码编辑器中选择标识符并选择重构 > 查找单元菜单命令时,将出现查找单元对话框。该操作会尝试查找包含所选标识符定义的适当单元,然后将所选单元添加到上述语句中。您可以选择要添加到 uses 语句中的多个单元。若要查找并添加单元到 uses 语句中,请执行以下操作:

  1. 代码编辑器中,单击要添加到 uses 语句中的单元的标识符。
  2. 选择重构 > 查找单元菜单命令。 查找单元 对话框将显示应用的 Delphi 单元的选择列表。
  3. 选择要添加到当前范围内的 uses 语句中的单元。您可以选择任意数量的单元。
  4. 选择在接口部分或实现部分中插入引用的位置。
  5. 单击确定。所选单元将添加到 uses 语句中。

如果您拥有带源代码的 Delphi,则可以在 Delphi 源代码文件夹中使用 grep。


1
在第三步的搜索框中输入函数名称似乎可以正常工作。 - Sertac Akyuz
我第一次尝试使用这个重构工具时遇到了这个错误:System.OutOfMemoryException: Exception of type 'System.OutOfMemoryException' was thrown. 通过重新启动解决了这个问题。之后,重构工具可以正常使用,但是无法找到函数CreateIpNetEntry,尽管已经存在翻译。因此,结论是不要使用这个工具,而是使用搜索功能。 - David Heffernan
@David,哇,你认为它失败了,这就是结论吗?如果你有Starter版本怎么办? - Victoria
@Victoria 请原谅我更喜欢使用真正有效的工具。我在代码编辑器中键入“CreateIpNetEntry”,调用“查找单元”命令,但是没有找到任何内容。 - David Heffernan
@David,听起来像是“全局结论”。这个重构工具对我很有效。我不知道这个问题,但你是否使用了IDE Fix Pack?还要记住,如果你使用的是Starter版,你无法grep源代码,因为它没有源代码,因此这个重构工具可能是你找到声明的“最后机会” :) - Victoria
我确实使用IDE Fix Pack。如果我将包含该函数的单元添加到uses子句中,该工具可以找到该函数。有点违背初衷。我不太信任Emba重构工具。多年来有太多的bug。当我搜索某些东西时,我希望能够信任结果。我认为我们都知道“在文件中查找”或者好老的grep可以可靠地工作。 - David Heffernan

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