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.
- Атрибуты
Примеры
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).