CodeModel.AddStruct(String, Object, Object, Object, Object, vsCMAccess) Метод

Определение

Создает новую конструкцию кода структуры и вставляет код в нужное место.

EnvDTE::CodeStruct AddStruct(std::wstring const & Name, winrt::Windows::Foundation::IInspectable const & Location, winrt::Windows::Foundation::IInspectable const & Position, winrt::Windows::Foundation::IInspectable const & Bases, winrt::Windows::Foundation::IInspectable const & ImplementedInterfaces, EnvDTE::vsCMAccess Access = EnvDTE.vsCMAccess.vsCMAccessDefault);
[System.Runtime.InteropServices.DispId(11)]
public EnvDTE.CodeStruct AddStruct (string Name, object Location, object Position, object Bases, object ImplementedInterfaces, EnvDTE.vsCMAccess Access = EnvDTE.vsCMAccess.vsCMAccessDefault);
[<System.Runtime.InteropServices.DispId(11)>]
abstract member AddStruct : string * obj * obj * obj * obj * EnvDTE.vsCMAccess -> EnvDTE.CodeStruct
Public Function AddStruct (Name As String, Location As Object, Optional Position As Object, Optional Bases As Object, Optional ImplementedInterfaces As Object, Optional Access As vsCMAccess = EnvDTE.vsCMAccess.vsCMAccessDefault) As CodeStruct

Параметры

Name
String

Обязательный. Имя новой структуры.

Location
Object

Обязательный. Путь и имя файла для нового определения структуры. В зависимости от языка имя файла может быть либо относительным, либо абсолютным по отношению к файлу проекта. Файл добавляется к проекту, если он не является его частью. Если файл не может быть создан и добавлен к проекту, метод AddStruct(String, Object, Object, Object, Object, vsCMAccess) дает сбой.

Position
Object

Необязательный параметр. По умолчанию равно 0. Элемент кода, после которого добавляется новый элемент. Если значением является CodeElement, новый элемент добавляется непосредственно после него.

Если значение имеет тип данных Long, AddStruct(String, Object, Object, Object, Object, vsCMAccess) указывает, после какого элемента следует добавить новый элемент.

Поскольку в коллекциях нумерация элементов начинается с 1, значение 0 означает, что новый элемент следует поместить в начало коллекции. Значение -1 означает, что элемент следует поместить в конец.

Bases
Object

Обязательный. Значение по умолчанию — Nothing. Вариант, содержащий массив SafeArray полных имен типов или объектов, CodeInterface от которых наследуется новый интерфейс.

ImplementedInterfaces
Object

Обязательный. Значение по умолчанию — Nothing. Массив SafeArray полных имен типов или объектов CodeInterface, представляющих интерфейсы, которые новый класс обещает реализовать.

Access
vsCMAccess

Необязательный параметр. Константа vsCMAccess.

Возвращаемое значение

CodeStruct

Объект CodeStruct.

Атрибуты

Примеры

Sub AddStructExample(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  

        ' Initialize the base classes array and the implemented   
        ' interfaces array.  
        Dim bases() As Object = {ConvertFullName(cm, "System.Object")}  
        Dim interfaces() As Object = { _  
            ConvertFullName(cm, "System.IDisposable"), _  
            ConvertFullName(cm, "System.IComparable") _  
        }  

        ' Create a new struct.  
        cm.AddStruct("TestStruct", projItem.Name, , bases, interfaces)  
    Catch ex As Exception  
        MsgBox(ex.Message)  
    End Try  

End Sub  

Function ConvertFullName(ByVal cm As CodeModel, _  
    ByVal fullName As String) As String  

    ' Convert a .NET type name into a C++ type name.  
    If (cm.Language = CodeModelLanguageConstants.vsCMLanguageVC) Or _  
        (cm.Language = CodeModelLanguageConstants.vsCMLanguageMC) Then  
        Return fullName.Replace(".", "::")  
    Else  
        Return fullName  
    End If  

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

        // Initialize the base classes array and the implemented   
        // interfaces array.  
        object[] bases = {ConvertFullName(cm, "System.Object")};  
        object[] interfaces = {  
            ConvertFullName(cm, "System.IDisposable"),  
            ConvertFullName(cm, "System.IComparable")  
        };  

        // Create a new struct.  
        cm.AddStruct("TestStruct", projItem.Name, -1, bases,   
            interfaces, vsCMAccess.vsCMAccessPublic);  
    }  
    catch (Exception ex)  
    {  
        MessageBox.Show(ex.Message);  
    }  
}  

string ConvertFullName(CodeModel cm, string fullName)  
{  
    // Convert a .NET type name into a C++ type name.  
    if ((cm.Language == CodeModelLanguageConstants.vsCMLanguageVC) ||   
        (cm.Language == CodeModelLanguageConstants.vsCMLanguageMC))  
        return fullName.Replace(".", "::");  
    else  
        return fullName;  
}  

Комментарии

Машинный машинный код Visual C++ требует использования разделителей в виде двоеточия (::) Форматирование полных имен типов. Все остальные языки поддерживают формат с разделителем-точкой.

Правильность аргументов определяется языком, на котором наследуется модель кода.

Примечание

Значения элементов модели кода, таких как классы, структуры, функции, атрибуты, делегаты и другие, после внесения некоторых изменений могут оказаться недетерминированными, другими словами, нельзя рассчитывать, что их значения будут всегда оставаться одинаковыми. Дополнительные сведения см. в разделе значения элементов модели кода могут изменяться при обнаружении кода с помощью модели кода (Visual Basic).

Применяется к