首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Vcl.Printers.pas(888):W1025不支持的语言特性:“自定义属性”

Vcl.Printers.pas(888):W1025不支持的语言特性:“自定义属性”
EN

Stack Overflow用户
提问于 2014-09-09 14:01:58
回答 1查看 3.3K关注 0票数 14

我正在尝试修复另一个VCL错误;这次是在Vcl.Printers.pas

现在,我们通过将buggy的VCL源文件复制到Delphi库路径中的另一个文件夹,并对这些文件应用补丁来实现这一点。我们将修复应用于TPrinter.SetPrinter

但是,文件中有六种使用属性修饰的方法:

代码语言:javascript
复制
[PrintingPermission(SecurityAction.LinkDemand, Level=PrintingPermissionLevel.AllPrinting)]
procedure TPrinter.Abort;
begin
   ...
代码语言:javascript
复制
[PrintingPermission(SecurityAction.LinkDemand, Level=PrintingPermissionLevel.AllPrinting)]
procedure TPrinter.EndDoc;
begin
   ...
代码语言:javascript
复制
[PrintingPermission(SecurityAction.LinkDemand, Level=PrintingPermissionLevel.AllPrinting)]
procedure TPrinter.NewPage;
begin
   ...
代码语言:javascript
复制
[PrintingPermission(SecurityAction.LinkDemand, Level=PrintingPermissionLevel.AllPrinting)]
{$IF DEFINED(CLR)}
procedure TPrinter.SetPrinter(ADevice, ADriver, APort: string; ADeviceMode: IntPtr);
{$ELSE}
procedure TPrinter.SetPrinter(ADevice, ADriver, APort: PChar; ADeviceMode: THandle);
{$ENDIF}
var
   ...
代码语言:javascript
复制
[PrintingPermission(SecurityAction.LinkDemand, Level=PrintingPermissionLevel.AllPrinting)]
function SetPrinter(NewPrinter: TPrinter): TPrinter;
begin
   ...

这些方法中的每一种都会引起警告:

  • dcc32警告Vcl.Printers.pas(968):W1025不支持的语言特性:“自定义属性”
  • dcc32警告Vcl.Printers.pas(978):W1025不支持的语言特性:“自定义属性”
  • dcc32警告Vcl.Printers.pas(1015):W1025不支持的语言特性:“自定义属性”
  • dcc32警告Vcl.Printers.pas(1026):W1025不支持的语言特性:“自定义属性”
  • dcc32警告Vcl.Printers.pas(1080):W1025不支持的语言特性:“自定义属性”
  • dcc32警告Vcl.Printers.pas(1599):W1025不支持的语言特性:“自定义属性”

我可以移除这些属性。或者大概有一种方法来压制警告。但我认为由Embarcadero添加的属性有一定的用途。

  • 如何使语言支持特性自定义属性?
  • 为什么它不是VCL源中的警告呢?
  • 为什么不允许VCL源代码使用它?
  • 这些属性是干什么的?
  • 谁会读这些属性?
  • 移除它们有问题吗?
  • 如果移除它们没有问题,为什么会有问题呢?

我真的在问:

我该怎么做呢?

但我也很想知道:

为什么不起作用?

为什么使它成为一个更有用的问题,但修复它的会很好。

奖金喋喋不休

,我们最终计划考虑研究使用绕道的可能性。尽管假定绕行方法仍然应该具有属性(否则,为什么会存在属性?)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-09 14:12:01

错误信息有点误导。我会帮你翻译的。当编译器说:

不支持的语言特性:“自定义属性”

它真正的意思是:

无法找到从TCustomAttribute派生的与您指定的属性名称匹配的类。

这些由PrintingPermission框架定义的.net属性对于Delphi .net编译器有意义。它仍然被Embarcadero用于构建IDE的部分。因此,保留了条件代码,它打开了CLR定义的存在。当这个VCL单元由Delphi编译器编译时,编译器可以看到.net框架类System.Drawing.Printing.PrintingPermissionAttribute

试图处理VCL单元中的警告是没有什么好处的。这不是您的代码,您在修改VCL单元时的目标是尽可能快地进出。你应该努力使最小的改变成为可能。

所以,忽略那些警告。禁止您修改的VCL单元的警告和提示。在您编译的所有VCL单元的顶部填充{$W-},然后继续前进。或者,如果你不能让自己变得如此严厉,你可以使用{$WARN UNSUPPORTED_CONSTRUCT OFF}

依次回答你的问题:

如何使语言支持特性自定义属性?

这不是语言限制。只是这些属性仅在以.net为目标时才定义。

为什么它不是VCL源中的警告呢?

至少在为.net以外的目标编译时是这样的。

为什么不允许VCL源代码使用它?

如果使用.net编译器,也可以使用它们。

这些属性是干什么的?

System.Drawing.Printing.PrintingPermissionAttribute

谁会读这些属性?

.net框架。我想是的。

移除它们有问题吗?

它不会影响Windows编译器产生的输出。它将增加您的修订控制系统中的差异。

如果移除它们没有问题,为什么会有问题呢?

因为它们在.net上使用。

票数 20
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25746629

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档