2015-03-19 2 views
0

У меня есть единица, которая имеет resourcestring в своем разделе implementation. Как я могу получить идентификатор resourcestring в другом устройстве?Получить идентификатор ресурса из области реализации

unit Unit2; 

interface 

implementation 

resourcestring 
    SampleStr = 'Sample'; 

end. 

Если он доступен в разделе interface, я могу написать это:

PResStringRec(@SampleStr).Identifier 
+0

[Согласно Allen Bauer] (http://stackoverflow.com/questions/30390079/how-resourcestring-identifiers-are-generated-by-delphi-complier) : «Компилятор генерирует идентификатор для каждой строки ресурса на основе имени юнита и идентификатора строки ресурса, поэтому он всегда стабилен, даже если значение изменяется». Поэтому вы можете попытаться определить 'PResStringRec (@SampleStr) .Identifier' во время выполнения и использовать определенное значение как постоянное (если вы действительно не можете модифицировать' Unit2' вообще.) – yonojoy

ответ

4

Все объявленные в разделе implementation институциональной единицы является частный к устройству. Это НЕ МОГУТ получить доступ непосредственно с другого устройства. Таким образом, вы будете иметь либо:

  1. Подведите resourcestring к interface секции:

    unit Unit2; 
    
    interface 
    
    resourcestring 
        SampleStr = 'Sample'; 
    
    implementation 
    
    end. 
    

    uses 
        Unit2; 
    
    ID := PResStringRec(@Unit2.SampleStr).Identifier; 
    
  2. оставить resourcestring в разделе implementation и объявить функцию в разделе interface, чтобы вернуть идентификатор:

    unit Unit2; 
    
    interface 
    
    function GetSampleStrResID: Integer; 
    
    implementation 
    
    resourcestring 
        SampleStr = 'Sample'; 
    
    function GetSampleStrResID: Integer; 
    begin 
        Result := PResStringRec(@SampleStr).Identifier; 
    end; 
    
    end. 
    

    uses 
        Unit2; 
    
    ID := GetSampleStrResID; 
    
+0

Все там методы требуют модификации Unit2, что нежелательно , Теперь я переместил раздел resourcestring в интерфейс, но resourcestring хранится в файловых ресурсах, и я могу получить его по идентификатору (без перехода в раздел интерфейса). Поэтому я хочу найти (возможно, взломать) метод, чтобы получить этот идентификатор. –

+0

Идентификатор не существует во время выполнения - это символ времени компиляции. Отображение между идентификатором и идентификатором ресурса находится в файле .drc (который генерируется компилятором). – SpeedFreak

Смежные вопросы