Delphi,无法在外部.pas文件中使用函数

3

我正在使用来自外部.pas文件的函数。我可以使用其中一些函数,但不能使用其他函数。 就我所看到的而言,这些函数的声明方式是相同的。 我想发布一些文件,但不知道如何发布大量代码。


你可以将.pas文件放在某个文件共享平台上,并提供一个链接。请发布函数的声明,无论它是类的一部分还是私有函数,请确保检查。 - BugFinder
pastebin(任何您选择的)都可以。 - Premature Optimization
2个回答

5

文件没有正确链接和/或未包含在项目搜索路径中,或者被具有相同功能名称的其他文件遮盖,并且奇怪的函数位于$IFDEF子句内。

检查拼写、使用子句、工作函数位置(在代码中单击函数名),以及$IFDEF子句。

  1. 文件在Delphi环境选项中没有正确链接
  2. 文件可能位于项目搜索路径之外。因此它没有链接。
  3. 在项目(DPR文件)中错误地输入了文件路径。例如,您正在引用旧版本文件的旧路径。

在这些情况下,如果名称匹配,则可以从其他文件中获取某些函数。例如,函数gluUnproject可以从OpenGL.pas和dglOpenGL.pas中都获取,如果第一个单元没有正确链接,我将遇到您现在遇到的问题-一些函数正常工作,而其他一些则缺失。在任何情况下,您都应该编译项目,Ctrl+单击一个正常工作的函数名称,然后查看它带您去哪里,检查文件版本位置。

  1. 这些函数可能位于$IFDEF子句中。这些是编译器指令,如果未满足某些条件,则在此类子句内的代码将对编译器不可见。例如,{$IFDEF MSWindows} Func {$ENDIF} 在Linux上将无法访问。

2
顺便提一下,我建议永远不要使用搜索路径。直接在项目中或通过包含任何所需文件。搜索路径会让你失去对程序中单位的控制和了解。 - David Heffernan
2
  1. 在您的搜索路径中有一个较旧版本的dcu,其功能较少。
- Marco van de Voort

5
您可以使用界面部分声明的函数,即出现在implementation关键字之前的代码部分。
您可能正在尝试调用仅在实现部分中定义的函数,即出现在implementation关键字之后的代码部分。
这些不同的部分是Delphi在单元级别实现公共和私有可见性的方式。
通常,在编写良好的单元时,将函数设置为私有对于该单元来说是有原因的。但是,如果您认为覆盖作者的决定是合理的,则需要在界面部分重新声明该函数。这将使其可供使用第三方单元的代码使用。

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