组件Tperlregex致命错误L3169?
发布时间:2020-12-15 09:38:09 所属栏目:大数据 来源:网络整理
导读:我一直在使用Tperl regex. 但今天当我尝试编译使用Tperlregex构建的应用程序时,它会提示“致命错误:内部错误L3169”. reg: Tperlregex;beginreg:=Tperlregex.create(nil); //If this line is removed,there is no error prompt.......end; 我正在使用Perlre
我一直在使用Tperl
regex.
但今天当我尝试编译使用Tperlregex构建的应用程序时,它会提示“致命错误:内部错误L3169”. reg: Tperlregex; begin reg:=Tperlregex.create(nil); //If this line is removed,there is no error prompt. ... ... end; 我正在使用Perlregex2009. 请帮忙. 编辑: 安德烈亚斯,非常感谢你. @Andreas非常感谢你的回复.我正在使用Delphi 7.你的答案是否适用于D7.我在pcre.pas中找到了注释(..Delphi 2009及更早版本有一个编译器错误,如果将TPerlRegEx安装到设计时包中,可能会导致内部错误,并且您不会同时将TPerlRegEx放入运行时包中.使用Delphi 2009及更早版本,如果您根本不使用软件包,则可以使用PCRE_STATICLINK(这意味着您不要将它安装到IDE中……“).我还没有在IDE中安装它,我将perlregex单元放入使用interface.我在pcre.pas中设置这些行 ... {$DEFINE PCRE_LINKDLL} {$IFDEF PCRE_STATICLINK} {$UNDEF PCRE_LINKDLL} {$ENDIF} 以前,它有效.但今天它没有. 解决方法
Delphi 2009似乎有* .obj文件导出问题.必须从代码中调用pcre_exec函数.如果Delphi的“智能链接器”将其删除,因为它不会在代码中的任何位置调用(智能链接器不会删除),编译器将失败.这是一个编译器错误,但你可以通过对PerlRegEx库进行一些小改动来解决它.您必须向TPerlRegEx.Create构造函数添加“UseFunction”本地过程(以及对它的调用).因此,当您创建TPerlRegEx对象时,智能链接器将不会删除pcre_exec函数.
constructor TPerlRegEx.Create(AOwner: TComponent); procedure UseFunction(P: Pointer); begin end; begin UseFunction(@pcre_exec); // if not used,D2009 will fail with internal compiler error UseFunction(@pcre_compile); // if not used,D7 will fail with internal compiler error inherited Create(AOwner); end; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |