在Delphi中编译PerlRegExp时未声明的标识符

时间:2012-09-11 09:51:42

标签: regex delphi delphi-2009 pcre

我想在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无法编译已使用的单位   ” .. \共享\类\ TPerlRegEx \ PerlRegEx.pas'

当我使用'pcre_dispose'注释掉这些行时,它编译好了。但是我不想通过不释放东西来创建内存泄漏......那么可能导致这种情况的原因呢?

有想法的人吗?

非常感谢!

1 个答案:

答案 0 :(得分:1)

逐步进行工作安装(从评论中提供的下载链接到原始问题):

将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. 检查使用子句(您可以使用Search->在文件中查找,检查项目中的所有文件)以获取PerlRegex。

  3. 确保您按照上面的确切步骤操作:将PerlRegex的文件夹添加到Project-> Compiler->搜索路径设置中,将PerlRegex添加到您要使用它的单位的uses子句中。如果是在我的机器上的示例代码中工作,但在您的其他项目中没有,问题在于