Я пытаюсь исправить другую ошибку VCL; на этот раз в Vcl.Printers.pas
.
Теперь мы делаем это, копируя исходные файлы Buggy VCL в другую папку в пути библиотеки Delphi и применяя исправления к этим файлам. Мы применили исправление к TPrinter.SetPrinter
.
Но в файле есть шесть методов, которые украшены атрибутами:
[PrintingPermission(SecurityAction.LinkDemand, Level=PrintingPermissionLevel.AllPrinting)]
procedure TPrinter.Abort;
begin
...
[PrintingPermission(SecurityAction.LinkDemand, Level=PrintingPermissionLevel.AllPrinting)]
procedure TPrinter.EndDoc;
begin
...
[PrintingPermission(SecurityAction.LinkDemand, Level=PrintingPermissionLevel.AllPrinting)]
procedure TPrinter.NewPage;
begin
...
[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
...
[PrintingPermission(SecurityAction.LinkDemand, Level=PrintingPermissionLevel.AllPrinting)]
function SetPrinter(NewPrinter: TPrinter): TPrinter;
begin
...
Каждый из этих методов вызывает предупреждение:
- [dcc32 Warning] Vcl.Printers.pas(968): W1025 Функция неподдерживаемого языка: 'custom attribute'
- [dcc32 Warning] Vcl.Printers.pas(978): W1025 Неподдерживаемый язык: пользовательский атрибут
- [dcc32 Warning] Vcl.Printers.pas(1015): W1025 Неподдерживаемый язык: пользовательский атрибут
- [dcc32 Warning] Vcl.Printers.pas(1026): W1025 Функция неподдерживаемого языка: 'custom attribute'
- [dcc32 Warning] Vcl.Printers.pas(1080): W1025 Функция неподдерживаемого языка: 'custom attribute'
- [dcc32 Warning] Vcl.Printers.pas(1599): W1025 Неподдерживаемый язык: пользовательский атрибут
Я мог бы просто удалить атрибуты. Или, предположительно, есть способ подавить предупреждения. Но я предполагаю, что атрибуты, добавленные Embarcadero, имеют определенную цель.
- Каким образом язык поддерживает пользовательские атрибуты функции?
- Почему это не предупреждение в источнике VCL?
- Почему для источника VCL разрешено использовать его, когда я не?
- Что делают эти атрибуты?
- Кто читает эти атрибуты?
- Есть ли проблемы с их удалением?
- Если нет проблем с их удалением, почему они там?
Я действительно спрашиваю:
Как заставить его работать?
Но я также хотел бы знать:
Почему он не работает?
И почему делает это гораздо более полезным вопросом, но исправить его будет хорошо.
Бонус Chatter
Да, мы в конечном итоге планируем подумать о возможности изучения использования detours. Хотя предположительно метод detoured все равно должен иметь атрибут (иначе почему бы атрибут существовать?)