Share via


CodeModel2.AddFunction メソッド

新しい関数コード コンストラクターを作成して、正しい位置にコードを挿入します。

名前空間:  EnvDTE80
アセンブリ:  EnvDTE80 (EnvDTE80.dll 内)

構文

'宣言
Function AddFunction ( _
    Name As String, _
    Location As Object, _
    Kind As vsCMFunction, _
    Type As Object, _
    Position As Object, _
    Access As vsCMAccess _
) As CodeFunction
CodeFunction AddFunction(
    string Name,
    Object Location,
    vsCMFunction Kind,
    Object Type,
    Object Position,
    vsCMAccess Access
)
CodeFunction^ AddFunction(
    String^ Name, 
    Object^ Location, 
    vsCMFunction Kind, 
    Object^ Type, 
    Object^ Position, 
    vsCMAccess Access
)
abstract AddFunction : 
        Name:string * 
        Location:Object * 
        Kind:vsCMFunction * 
        Type:Object * 
        Position:Object * 
        Access:vsCMAccess -> CodeFunction
function AddFunction(
    Name : String, 
    Location : Object, 
    Kind : vsCMFunction, 
    Type : Object, 
    Position : Object, 
    Access : vsCMAccess
) : CodeFunction

パラメーター

  • Name
    型 : String

    必須。 新しい関数の名前。

  • Location
    型 : Object

    必須。 新しい関数定義のパスとファイル名。 言語に応じて、ファイル名はプロジェクト ファイルへの相対パスまたは絶対パスで表されます。 ファイルが既にプロジェクト項目になっていない場合は、ファイルがプロジェクトに追加されます。 ファイルを作成してプロジェクトに追加できない場合は、AddFunction が失敗します。

  • Kind
    型 : vsCMFunction

    必須。 関数の種類 (Property Get やメソッドなど) を示す vsCMFunction 定数。

  • Type
    型 : Object

    必須。 関数で返されるデータ型を示す vsCMTypeRef 定数です。 CodeTypeRef オブジェクト、vsCMTypeRef 定数、または完全修飾型名のいずれかになります。

  • Position
    型 : Object

    省略可能。 既定値は 0 です。 ここで指定したコード要素の後に、新しい要素を追加します。 値が CodeElement の場合は、その値の直後に新しい要素が追加されます。

    値が long 型の場合は、後ろに新しい要素を追加する要素が AddFunction によって示されます。

    コレクションのカウントは 1 から始まるため、0 を指定すると新しい要素がコレクションの最初に配置されます。 値 -1 は要素を末尾に配置することを示します。

  • Access
    型 : vsCMAccess

    省略可能。 vsCMAccess 定数。

戻り値

型 : CodeFunction
CodeFunction オブジェクト。

解説

次の例のように、(vsCMFunctionOperator を使用して) オーバーロードされた演算子を追加できます。

Sub testAddOverloadOperatorCPP()

Dim fcm As FileCodeModel = _

DTE.ActiveDocument.ProjectItem.FileCodeModel

Dim cc As CodeClass = fcm.CodeElements.Item("someClassName")

cc.AddFunction("+", vsCMFunction.vsCMFunctionOperator, _

vsCMTypeRef.vsCMTypeRefInt)

'cc.AddFunction("someFunction +", _

vsCMFunction.vsCMFunctionFunction, vsCMTypeRef.vsCMTypeRefInt)

End Sub

この場合、オーバーロードされた演算子そのものだけではなく、AddFunction の呼び出しでオーバーライドする関数の名前 (この例では、"someFunction") を明示的に指定する必要があります。 次の例のように、上記のコードを使用します。

cc.AddFunction("+", vsCMFunction.vsCMFunctionOperator,...)

この場合、このコードは動作しません。 代わりに、 を使用する必要があります。

cc.AddFunction("someFunction +", vsCMFunction.vsCMFunctionFunction,...)

このメソッドは Visual C++ だけで実装されます。これは、C#、Visual Basic、および J# では、最上位の関数を使用できないためです。

ネイティブの Visual C++ では、コロン区切り形式 (::) で完全修飾型名を指定する必要があります。

注意

特定の種類の編集を行った後に、クラス、構造体、関数、属性、デリゲートなどのコード モデル要素の値を決定できないことがあります。つまり、これらの要素の値は、信頼できる値ではなく、常に同じ値になるとは限りません。詳細については、「コード モデルを使用したコードの調査 (Visual Basic)」で、コード モデル要素値を変更する方法についての説明を参照してください。

Sub AddFunctionExample(ByVal dte As DTE2)

    ' Before running this example, open a code document from a project.
    Try
        Dim projItem As ProjectItem = dte.ActiveDocument.ProjectItem
        Dim cm As CodeModel = projItem.ContainingProject.CodeModel

        ' Create a new function.
        cm.AddFunction("TestFunction", projItem.Name, _
            vsCMFunction.vsCMFunctionFunction, _
            vsCMTypeRef.vsCMTypeRefInt)
    Catch ex As Exception
        MsgBox(ex.Message)
    End Try

End Sub
public void AddFunctionExample(DTE2 dte)
{
    // Before running this example, open a code document from 
    // a project.
    try
    {
        ProjectItem projItem = dte.ActiveDocument.ProjectItem;
        CodeModel cm = projItem.ContainingProject.CodeModel;

        // Create a new function.
        cm.AddFunction("TestFunction", projItem.Name, _
            vsCMFunction.vsCMFunctionFunction, _
            vsCMTypeRef.vsCMTypeRefInt, -1, _
            vsCMAccess.vsCMAccessDefault);
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

.NET Framework セキュリティ

  • 直前の呼び出し元に対する完全な信頼。このメンバーは、部分的に信頼されているコードから使用することはできません。詳細については、「部分信頼コードからのライブラリの使用」を参照してください。

参照

関連項目

CodeModel2 インターフェイス

EnvDTE80 名前空間

その他の技術情報

方法 : オートメーション オブジェクト モデルのコード例をコンパイルおよび実行する

コード モデルを使用したコードの調査 (Visual Basic)

コード モデルを使用したコードの調査 (Visual C#)