2014-03-25 12 views
10

我不知道這些XML參考是如何工作的,我只是不明白爲什麼他們工作或爲什麼他們不工作,我什麼也沒有發現。Delphi xml註釋中的<see>標記實際上在什麼情況下工作?

下面是一個例子:

type 
    TOuterClass= class 
    strict private 
    type 
     TLogger = class 
     public 
     /// <summary>adds a log entry</summary> 
     /// <param name="Msg">text to log</param> 
     procedure Log(const Msg: string); 
     end; 
    strict private 
    FLogger: TLogger; 
    public 
    /// <summary>adds a log entry</summary> 
    /// <param name="Msg">text to log</param> 
    /// <remarks>just calls <see cref="TOuterClass.TLogger.Log" /> 
    /// </remarks> 
    procedure Log(const Msg: string); 

    property Logger: TLogger read FLogger; 
    end; 

在TOuterClass.Log的評論的鏈接不起作用。德爾福XE5只是想它,然後放棄。

另一個很簡單的例子:

Unit MyUnit 

type 
    /// <summary>MyType Comment</summary> 
    TMyType = reference to procedure; 

/// <param name="MyTypeParam"><see cref="MyUnit.TMyType" /></param> 
procedure MyProcedure(MyTypeParam: TMyType); 

同樣,這個鏈接不起作用。有趣的是:如果你只是註釋掉了xml註釋,那麼Delphi會自動創建相同的鏈接文本(「MyUnit.TMyType」)並且它可以工作!這真讓我困惑。

究竟可以將這些鏈接鏈接到,該公約必須跟着我得到它的工作,什麼他們不能鏈接到?

official documentation很短於這個:

<see> Reference to a specific type, symbol, or identifier 

如果是任何重要:我用Delphi XE5,但我將不勝感激這是如何工作的德爾福的任何版本的提示。我甚至可以欣賞實際工作的鏈接的示例(請包括您的Delphi版本),也許這將有助於揭示它背後的機制。

編輯2014年8月25日:

我開始認爲這些鏈接鏈接到實際的HTML文檔文件,這在我的情況下,不存在,因爲我沒有爲定義的目錄他們。我只是在使用XML註釋來獲取Delphi IDE中的提示。任何人都可以確認嗎?

+0

這可能是它只支持本地引用。試試看看這裏介紹的DocInsight人員:他們似乎都知道這應該如何工作。 –

+0

這是一個很好的觀點,但我怎樣才能讓DocInsight人蔘與其中? – RSE

+0

平安[寶泉佐(http://stackoverflow.com/users/214400/baoquan-zuo)(:@BaoquanZuo(編輯:嗯:那@沒有工作) –

回答

5

不知道這仍然是一個問題,但我知道在XE3你可以使用|字符引用回

Unit MyUnit 

type 
    /// <summary>MyType Comment</summary> 
    TMyType = reference to procedure; 

    /// <param name="MyTypeParam"><see cref="MyUnit|TMyType" /></param> 
    procedure MyProcedure(MyTypeParam: TMyType); 

也許我誤解的問題,但這個語法將允許代碼洞察引用回來。 然而,這在編譯時會產生一個警告,所以如果你想使用它,你可以通過在代碼中加入{$WARN XML_CREF_NO_RESOLVE OFF}來關閉警告。

我有截圖,但我不能發佈他們沒有。但你可以自己試試

unit Unit2; 

interface 

uses 
    Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, 
    Vcl.Controls, Vcl.Forms, Vcl.Dialogs; 

type 
    TForm2 = class(TForm) 
    procedure FormCreate(Sender: TObject); 
    private 
    { Private declarations } 
    public 
    { Public declarations } 
    end; 

    /// <summary>MyType Comment</summary> 
    TMyType = reference to procedure; 

    /// <summary>This is MyProcedure</summary> 
    /// <param name="MyTypeParam"><see cref="Unit2|TMyType" /></param> 
    procedure MyProcedure(MyTypeParam: TMyType); 

var 
    Form2: TForm2; 

implementation 

{$R *.dfm} 

procedure TForm2.FormCreate(Sender: TObject); 
begin 
//Call MyProcedure 
MyProcedure(nil); 
end; 

end. 
+0

問題仍然存在,我只是暫時忽略它,產生不起作用的XML註釋...所以我會在星期一嘗試它並報告回 – RSE

+0

該語法不起作用它會產生一個警告:「W1206對'OnOpsChanged'的評論具有無法解析的cref屬性'TCMTSyncLogger | EndOp'」 – RSE

+0

該語法對Delphi XE3中的代碼洞察確實有效,但它確實會產生警告 –

相關問題