【问题标题】:Undeclared identifier when compiling PerlRegExp in Delphi在 Delphi 中编译 PerlRegExp 时未声明的标识符
【发布时间】:2012-09-04 05:27:24
【问题描述】:

我想在我的 Delphi 2009 项目中使用 TPerlRegExp(来自 http://www.regular-expressions.info/delphi.html,页面的中间位置)。

我将 PerlRegEx.pas 和 pcre.pas 添加到我的项目组中,并将“PerlRegEx”放入我的使用列表中。

编译时出现以下错误:

[DCC 错误] PerlRegEx.pas(305): E2003 未声明的标识符: 'pcre_dispose'

[DCC 错误] PerlRegEx.pas(533): E2003 未声明的标识符: 'pcre_dispose'

[DCC 致命错误] test.dpr(21): F2063 无法编译使用的单元 '..\Shared\Classes\TPerlRegEx\PerlRegEx.pas'

当我使用“pcre_dispose”注释掉这些行时,它可以编译。但我当然不想通过不释放东西来造成内存泄漏......那么可能是什么原因造成的?

谁有想法?

非常感谢!

【问题讨论】:

  • 你下载了哪个one of them?您能否附上您使用过的版本的确切链接?
  • 我都试过了,都出现了同样的问题。目前我正在包括最新版本的文件:regular-expressions.info/download/TPerlRegEx.zip
  • Jedi 代码库也有 PCRE 的封装。试过了吗?
  • @Arioch'The 还没有尝试过,因为我有一个更旧的 Jedi 安装用于其他项目,我不能只是更新而没有后果。而且我想我不能并排使用不同的版本。或者我可以只安装 PCRE 包装器组件吗?
  • @Arioch'The 你为什么推荐 JCL?! OP想用优秀的TPerlRegEx

标签: regex delphi delphi-2009 pcre


【解决方案1】:

逐步安装(从您在 cmets 中提供的下载链接到原始问题):

将 Zip 文件解压缩到一个文件夹中。我使用了E:\Code\PerlRegEx\XE2,因为我已经为 D2007 安装了非 Unicode 版本。

使用File->New->Other->Console App 开始一个新的控制台项目。

使用 IDE 主菜单中的Project->Options->Compiler,并将上面的路径位置添加到Search Path。粘贴以下代码以替换代码编辑器中的所有内容:

program Project2;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils, PerlRegex;

var
  Regex: TPerlRegex;

begin
  try
    Regex := TPerlRegex.Create;
    try
      Regex.Subject := 'This is a test of TPerlRegex';
      Regex.RegEx := '\btest\b';
      if Regex.Match then
        WriteLn('Found match: ' + Regex.MatchedText)
      else
        WriteLn('Can''t be! No match found!');
      ReadLn;
    finally
      Regex.Free;
    end;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.

如您所见,我对这个测试用例使用了一个非常复杂的TPerlRegex 功能测试。 :-)

如果上述方法对您有用,但您自己的项目仍然存在问题:

  1. 检查您的旧项目以获取对旧版本 TPerlRegex 的引用(搜索或库路径中的另一个文件夹,工具->选项->环境->库路径中的条目)。

  2. 检查 PerlRegex 的 uses 子句(您可以使用 Search->Find in Files,检查 All Files in Project)。

  3. 确保您遵循上述步骤:将 PerlRegex 的文件夹添加到您的项目->编译器->搜索路径设置中,将 PerlRegex 添加到您要使用它的单元的使用子句中。如果它在我的示例中的代码在您的机器上,但不在您的其他项目中,问题就在那里

【讨论】:

  • 你使用 XE2。那可能是 2009 年的本地问题,例如编译器中的错误或错误的 $IfDefs
  • @KenWhite 它来抱怨它找不到 PerlRegex.dcu :/ TPerlRegExp 文件夹中有一个 DCU ......我意识到我是一个新手,对不起......
  • 好的,现在它可以编译了,你的例子......我所做的只是检查 IDE 的选项......我没有改变它们。但我原来的项目仍然没有。好奇怪!!
  • @SonOfGrey "我刚刚将两个 .pas 文件添加到我的项目中,但也许这不是这样做的方法?" - 删除它们
  • @Arioch'谢谢,这样做了,但问题仍然存在。已经删除了 DCU 并通过 Ken 的测试示例重建了它们,但我仍然收到“未声明的 indentfier pcre_dispose”-错误...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-31
  • 1970-01-01
相关资源
最近更新 更多