Академический Документы
Профессиональный Документы
Культура Документы
7 Примечание
Похожие статьи
Ссылка Описание
Краткий справочник
Концепция Стандартная C++/CX Комментарии
C++
Семейство Platform
пространств имен
содержит типы,
реализующие
базовые типы среда
выполнения
Windows.
Концепция Стандартная C++/CX Комментарии
C++
short
int16
16-разрядное
знаковое целое
unsigned short uint16 число.
16-разрядное целое
число без знака.
int
int
32-разрядное
знаковое целое
unsigned int uint32 число.
32-разрядное целое
число без знака.
uint64
unsigned long 64-разрядное целое
long число без знака.
enum struct
Концепция Стандартная C++/CX Комментарии
C++
std::wstring
Platform::String^ Platform::String^ —
это неизменяемая
L"..." последовательность
символов Юникода
с подсчетом ссылок,
представляющих
текст.
Концепция Стандартная C++/CX Комментарии
C++
Модификатор hat
означает "указатель
на объект среда
выполнения
Windows, на
который
автоматически
учитывается
ссылка". Точнее,
дескриптор -объект
объявляет, что
компилятор должен
вставлять код для
автоматического
управления числом
ссылок объекта и
удалять объект, если
число ссылок
переходит к нулю.
Концепция Стандартная C++/CX Комментарии
C++
Ссылка
отслеживания
означает "ссылку на
объект среда
выполнения
Windows, который
автоматически
учитывается".
Точнее, ссылка
отслеживания
объявляет, что
компилятор должен
вставлять код для
автоматического
управления
количеством ссылок
объекта. Код
удаляет объект ,
если количество
ссылок переходит к
нулю.
Объявление T identifier[]
Array<T^>^ identifier( size )
Объявляет
массива одномерный
std::array -или-
изменяемый или
identifier доступный только
WriteOnlyArray<T^> для записи массив
identifier( size ) типа T^ . Сам массив
является объектом с
подсчетом ссылок,
который должен
быть объявлен с
модификатором
дескриптора
объекта.
(Объявления
массива используют
класс заголовка
шаблона, который
находится в
пространстве имен
Platform .)
Объявляет класс
среды выполнения
со специальными
возможностями по
умолчанию public .
Концепция Стандартная C++/CX Комментарии
C++
Объявляет
структуру POD,
которая имеет
специальные
возможности по
умолчанию public .
Объект value
struct может быть
представлен в
метаданных
Windows, а
стандартный C++
struct — нет.
Объявляет
интерфейс со
специальными
возможностями по
умолчанию public .
Концепция Стандартная C++/CX Комментарии
C++
*delegate-identifier;
Создает обработчик
-или-
событий.
EventRegistrationToken token-
Добавляет
identifier = object.event-
обработчик
событий.
identifier += delegate-
identifier;
Добавление
обработчика
-или-
событий
возвращает маркер
auto token-identifier =
события ( token-
object.event-identifier::add(
identifier ). Если
delegate-identifier );
планируется явно
удалить обработчик
object.event-identifier -=
событий, следует
token-identifier;
сохранить токен
события для
-или-
последующего
использования.
object.event-
identifier::remove( token-
Удаляет обработчик
identifier );
событий.
Чтобы удалить
обработчик
событий,
необходимо указать
токен события,
который был
сохранен при
добавлении
обработчика
событий.
Концепция Стандартная C++/CX Комментарии
C++
Объявляет свойство
функции-члена
класса или объекта.
Объявляет
индексированное
свойство функции-
члена объекта.
Объявляет
индексированное
свойство функции-
члена класса.
public private
protected internal
Совет
определены в collection.h .
Пространства имен
Все типы среда выполнения Windows должны объявляться в пространстве имен;
сам API Windows организован по пространству имен. Файл .winmd должен иметь то
же имя, что и корневое пространство имен. Например, именованный
A.B.C.MyClass класс можно создать только в том случае, если он определен в
Фундаментальные типы
Среда выполнения Windows определяет следующие основные типы: UInt8 ,
UInt16 Int64 Int16 Int32 UInt32 , UInt64 , , Single и . Double Char16 Boolean String
C++/CX поддерживает основные числовые типы в своем пространстве имен по
умолчанию как uint16 , uint32 , , uint64 , int16 , , int32 int64 , float32 и
float64 char16 . Boolean и String также определяются в Platform пространстве
имен.
Строки
Строка среда выполнения Windows — это неизменяемая последовательность 16-
разрядных символов ЮНИКОДа. Строка среда выполнения Windows проецируется
как Platform::String^ . Этот класс предоставляет методы для создания, обработки
строк, а также для их преобразования в тип wchar_t и из этого типа.
Массивы
Среда выполнения Windows поддерживает одномерные массивы любого типа.
Массивы массивов не поддерживаются. В C++/CX среда выполнения Windows
массивы проецируются как Platform::Array класс.
Класс среда выполнения Windows проецируется в C++/CX как или ref class ref
struct тип, так как он копируется по ссылке. Управление памятью для ref class
Объект ref class с открытым конструктором должен быть объявлен как sealed ,
чтобы предотвратить дальнейшее наследование.
Или value class представляет базовую структуру данных и содержит только поля,
которые могут быть value class типами, value struct типами или
типами Platform::String^ . value struct value struct и value class объекты
копируются по значению.
Можно value struct сделать значение NULL, упаковав его в IBox интерфейс.
Разделяемые классы
Функция разделяемого класса позволяет определять один класс на несколько
файлов. Это позволяет средствам создания кода, таким как редактор XAML,
изменять один файл без касания другого файла, который вы редактируете.
Свойства
Свойство — это открытый элемент данных любого типа среда выполнения
Windows. Он объявляется и определяется с помощью ключевого property слова.
Свойство реализуется как get / set пара методов. Клиентский код обращается к
свойству, как если бы он был открытым полем. Свойство, которое не требует
пользовательского get или set кода, называется тривиальным свойством и
может быть объявлено без явных get или set методов.
специализированными.
Интерфейсы
Интерфейс среда выполнения Windows определяет набор открытых свойств,
методов и событий, которые должен реализовывать или ref class ref struct тип,
если он наследуется от интерфейса.
Делегаты
Делегат в среда выполнения Windows аналогичен объекту std::function в C++. Это
особый ref class тип, используемый для вызова функций, предоставляемых
клиентом, имеющих совместимые сигнатуры. Делегаты чаще всего используются в
среда выполнения Windows в качестве типа события.
Исключения
В C++/CX можно перехватывать пользовательские типы исключений, std::exception
типы и Platform::Exception типы.
События
Событие является общедоступным членом в типе ref class делегата или ref
struct типом которого является делегат. Событие может вызываться — или
Дополнительные сведения см. в статье Events (Visual Basic) (События в Visual Basic).
Приведение
C++/CX поддерживает стандартные операторы static_castdynamic_castприведения
C++, а reinterpret_castтакже safe_cast операторы, относящиеся к C++/CX.
Атрибуты
Атрибут — это значение метаданных, которое можно применить к любому среда
выполнения Windows типу или члену типа. Атрибуты можно проверить во время
выполнения. Среда выполнения Windows определяет набор общих атрибутов в
Windows::Foundation::Metadata пространстве имен. Пользовательские атрибуты в
Видимость типов
В пространстве имен среда выполнения Windows типы, в отличие от стандартных
типов C++, имеют либо частные, либо общедоступные специальные возможности.
По умолчанию типы являются закрытыми. Только открытые типы являются
видимыми для метаданных и поэтому могут использоваться из приложений и
компонентов, которые написаны на языках, отличных от C++. В общем случае
правила для видимых типов являются более жесткими, чем правила для
невидимых типов, поскольку видимые типы не могут предоставлять доступ к
характерным для C++ возможностям, не поддерживаемым в языках .NET или
JavaScript.
7 Примечание
Числовые типы
В следующей таблице перечислены встроенные числовые типы. Числовые типы
объявляются в пространстве имен default и являются определениями typedef для
соответствующих встроенных типов C++. Не все встроенные типы C++ (например,
long) поддерживаются в среда выполнения Windows. Для согласованности и
ясности рекомендуется использовать имя C++/CX.
Имя Определение Имя в Standard Диапазон значений
C++/CX C++
int64 64-разрядное целое число со long long или -9 223 372 036 854, 775 808
знаком. __int64 до 9 223 372 036 854 775
807
uint64 64-разрядное целое число unsigned long long от 0 до 18 446 744 073 709
без знака. или unsigned 551 615
__int64
Имя Определение
Быстрая передача
Создание строк
Значение объекта String — неизменяемая (доступная только для чтения)
последовательность символов char16 (16-разрядных символов Юникода).
Поскольку объект String является неизменяемым, присвоение нового строкового
литерала переменной String фактически заменяет исходный объект String новым
объектом String . При операции объединения исходный объект String
разрушается, и создается новый объект.
Литералы
C++
String^ str1 = "Test"; // ok for ANSI text only. uses current code page
String^ str2("Test");
String^ str4(L"Test");
String^ str6(str1);
std::wstring wstr1(L"Test");
C++
// Concatenation
// Comparison
if (str1->Equals(str2)) { /* ... */ }
if(str1->IsEmpty()) { /* ...*/};
auto it = str1->Begin();
char16 ch = it[0];
Преобразование строк
Объект Platform::String может содержать только символы char16 или символ
NULL . Если приложение работает с 8-разрядными символами, используйте String::D
ata для извлечения текста в виде const wchar_t* . Затем можно воспользоваться
соответствующими функциям Windows или стандартной библиотеки для
выполнения операций с данными и преобразовать их обратно в объект wchar_t*
или wstring, из которого можно создать новый объект Platform::String .
C++
StringReference
В некоторых случаях код (а) получает std::wstring или wchar_t строковый литерал
или L"" и просто передает его другому методу, который принимает String^ в
качестве входного параметра. Если исходный строковый буфер остается
допустимым и не изменяется до возвращения результата функцией, строку
wchar_t* или строковый литерал можно преобразовать в Platform::StringReference,
C++
IBuffer^ buffer =
CryptographicBuffer::DecodeFromBase64String(StringReference(s.c_str()));
1. const Platform::Array^
2. Platform::Array^*
3. Platform::WriteOnlyArray
Эти типы массивов используются для реализации трех типов шаблонов массивов,
определенных среда выполнения Windows.
PassArray
FillArray
ReceiveArray
Шаблон PassArray
Если клиентский код передает массив в метод C++, а метод не изменяет его, метод
принимает массив в виде const Array^ . На уровне среда выполнения Windows
двоичного интерфейса приложения (ABI) это называется PassArray. В следующем
примере показано, как передать массив, выделенный в JavaScript функции C++,
которая считывает из него.
JavaScript
//JavaScript
function button2_click() {
a[i] = i;
document.getElementById('results').innerText
C++
double sum = 0;
sum += arr[i];
return sum;
Шаблон ReceiveArray
В шаблоне ReceiveArray клиентский код объявляет массив и передает его методу,
который выделяет для него память и инициализирует. Тип входного параметра
C++ является указателем на шляпу: Array<T>^* . В следующем примере показано,
как объявить объект массива в JavaScript и передать его функции C++, которая
выделяет память, инициализирует элементы и возвращает массив в JavaScript.
JavaScript обрабатывает выделенный массив в качестве возвращаемого значения,
но функция C++ обрабатывает его как выходной параметр.
JavaScript
//JavaScript
function button3_click() {
C++
temp[i] = i;
*arr = temp;
Array<int>^ Class1::CalleeAllocatedDemo2()
temp[i] = i;
return temp;
Заполнение массивов
Если необходимо выделить массив в вызывающем объекте, а затем
инициализировать или изменить его в вызываемом объекте, используйте массив
WriteOnlyArray . В следующем примере показано, как реализовать функцию C++,
которая использует WriteOnlyArray и вызывает его из JavaScript.
JavaScript
// JavaScript
function button4_click() {
obj.callerAllocatedDemo(a);
C++
arr[i] = i;
Преобразования массивов
В этом примере показано, как использовать для Platform::Array создания других
типов коллекций:
C++
#include <vector>
#include <collection.h>
using namespace Platform;
vector<int> v3;
for(int i : arr)
v3.push_back(i);
C++
Array<int>^ GetNums()
Массивы массивов
Система типов среды выполнения Windows не поддерживает концепцию массивов
массивов и, таким образом, невозможно использовать IVector<Platform::Array<T>>
в качестве возвращаемого значения или параметра метода в открытом методе. Для
передачи массива массивов или последовательности массивов в ABI используйте
IVector<IVector<T>^> .
C++
public:
// Fill an Array.
dr->ReadBytes(bytes);
uint8 data[1024];
};
Объявление
В следующем фрагменте кода объявляется класс ссылки Person . Обратите
внимание, что стандартный тип C++ std::map используется в закрытых членах, а
интерфейс среда выполнения Windows IMapView используется в общедоступном
интерфейсе. Также обратите внимание, что в конце объявлений ссылочных типов
используется оператор "^".
C++
// #include <map>
[WFM::WebHostHidden]
public:
Person(Platform::String^ name);
private:
Platform::String^ m_name;
};
Реализация
В этом примере кода демонстрируется реализация класса ссылки Person .
C++
#include <collection.h>
using namespace Windows::Foundation::Collections;
m_numbers[type] = number;
// Simple implementation.
Использование
В следующем примере кода показано, как клиентский код использует класс ссылки
Person .
C++
p->AddPhoneNumber("Home", "425-555-4567");
p->AddPhoneNumber("Work", "206-555-9999");
C++
void DoSomething()
Windows::Foundation::Uri docs("http://docs.microsoft.com");
// ...
Управление памятью
Класс ссылки размещается в динамической памяти с помощью ключевого слова
ref new .
C++
C++
Когда создается экземпляр класса ссылки C++/CX, его память перед вызовом
конструктора инициализируется нулями, поэтому такая инициализация для
отдельных членов, включая свойства, не требуется. Если класс C++/CX является
производным от класса библиотеки C++ для среды выполнения Windows (WRL),
инициализация нулями осуществляется только для области производного класса
C++/CX.
Элементы
Класс ссылки может содержать функции-члены public , protected и private ; только
члены public и protected передаются в метаданные. Вложенные классы и классы
ссылок разрешены, однако они не могут быть public . Открытые поля не
допускаются; открытые члены данных должны объявляться как свойства. Закрытые
и защищенные внутренние данные-члены могут быть полями. По умолчанию в
классе ссылки доступность всех членов равна private .
Открытые члены не могут быть объявлены как , так как const система типов среда
выполнения Windows не поддерживает const. Можно использовать статическое
свойство для объявления открытого члена данных с постоянным значением.
Класс ссылки может содержать стандартные типы C++, включая типы const , в
любых членах private , internal или protected private .
Деструкторы
В C++/CX вызов delete общедоступного деструктора вызывает деструктор
независимо от количества ссылок объекта. Это позволяет определить деструктор,
который будет выполнять пользовательскую очистку ресурсов, не относящихся к
RAII, детерминированным образом. Однако даже в этом случае сам объект не
удаляется из памяти. Память для объекта освобождается, только когда число
ссылок достигает нуля.
При попытке обращения к членам класса, для которого уже запускался деструктор,
поведение будет неопределенным; это наиболее вероятная причина сбоя
программы. При вызове delete t для типа, у которого нет открытого деструктора,
ничего не происходит. При вызове delete this для типа или базового класса, не
имеющих деструктора private или protected private в иерархии типов, также
ничего не происходит.
эти интерфейсы.
Наследование
Platform::Object является универсальным базовым классом для всех классов ссылок.
Все классы ссылок неявно преобразуются в Platform::Object и могут
переопределять Object::ToString. Однако модель наследования среда выполнения
Windows не предназначена в качестве общей модели наследования. В C++/CX это
означает, что определяемый пользователем открытый ссылочный класс не может
служить базовым классом.
C++
ref class C{};
{};
C++
namespace InheritanceTest2
[WFM::WebHostHidden]
internal:
Base(){}
protected:
};
public:
MyPublicClass(){}
//...
};
// in mainpage.xaml.h:
Platform::String^ str;
int i;
};
TestStruct ts;
Platform::String^ str;
int i;
};
// in mainpage.cpp:
TestStruct ts3;
ts3.i = 108;
Структуру значений или класс значений может содержать в виде полей только
фундаментальные числовые типы, классы перечисления или
Platform::String^ Platform::IBox <T>^ , где T является числовым типом или классом
перечисления или классом значений или структурой. Поле IBox<T>^ может иметь
значение nullptr ; таким образом в C++ реализуется концепция типов значений,
допускающих значения NULL.
Поскольку все члены класса value class или value struct являются открытыми и
передаются в метаданные, не разрешается использовать стандартные типы C++ в
качестве членов. Это отличается от классов ссылок, которые могут содержать
стандартные типы C++ private или internal .
C++
Africa,
Asia,
Australia,
Europe,
NorthAmerica,
SouthAmerica,
Antarctica
};
double Longitude;
};
Platform::String^ Name;
int Population;
double AverageTemperature;
GeoCoordinates Coordinates;
Continent continent;
};
C++
C++
Тип в Method2 является ссылкой на MyValueType и работает так же, как ссылочный
тип в стандартном C++.
Method2(ref obj);
Также можно использовать символ указателя (*) для передачи типа значения по
ссылке. Поведение по отношению к вызывающим объектам в других языках
совпадает (вызывающие объекты в C# используют ключевое слово ref ), но в
методе тип является указателем на тип значения.
Типы значений, допускающие значение
NULL
Как упоминалось ранее, класс значений или структуру значений может иметь поле
типа Platform::IBoxT<>^, IBox<int>^ например. Это поле может иметь любое
числовое значение, допустимое для типа int , или значение nullptr . Поле,
допускающее значение NULL, можно передать в качестве аргумента методу,
параметр которого объявлен как необязательный, или в любой другой объект, в
котором тип значения не обязательно должен иметь значение.
Platform::String^ Name;
int EnrollmentYear;
};
//To create a Student struct, one must populate the nullable type.
MainPage::MainPage()
InitializeComponent();
Student A;
A.Name = "Alice";
A.EnrollmentYear = 2008;
Student B;
B.Name = "Bob";
B.EnrollmentYear = 2011;
B.GraduationYear = nullptr;
IsCurrentlyEnrolled(A);
IsCurrentlyEnrolled(B);
bool MainPage::IsCurrentlyEnrolled(Student s)
if (s.GraduationYear == nullptr)
return true;
return false;
public:
int i;
Platform::String^ s;
};
public:
};
Синтаксис
Чтобы определить разделяемый класс, укажите ключевое слово partial
непосредственно перед ключевым словом класса, которое иначе было бы
обычным определением класса. Результирующее ключевое слово, например
partial ref class , является контекстным ключевым словом, содержащим
пробелы. Определения разделяемых классов поддерживаются в следующих
конструкциях.
union
C++
Содержимое
Определение разделяемого класса может содержать любые конструкции, которые
могли бы содержаться в полном определении класса, если бы ключевое слово
partial не было указано. Оно может содержать любые допустимые конструкции
C++
public:
};
ref class N
};
Объявление
Частичное определение класса, например MyClass только объявление MyClass. То
есть в нем вводится только имя MyClass . MyClass нельзя использовать таким
образом, чтобы требуется определение класса, например знание размера MyClass
или использования базового элемента или элемента MyClass . MyClass считается
определенным только в том случае, если компилятор обнаруживает не частичное
определение MyClass .
C++
// Declaration #1
// Declaration #2
// Declaration #3
// Declaration #4
// Declaration #5
// Declaration #6
Все ключевые слова объявления класса, такие как class и struct , должны
совпадать. Например, ошибкой будет создать код partial class X {}; struct X {}; .
Полное определение
Когда компилятор встречает полное определение класса X, он действует, как если
бы именно в нем были объявлены все базовые классы, члены и т. п. в том порядке,
в котором они определены в разделяемых классах. Таким образом, содержимое
разделяемых классов обрабатывается так, как если бы оно находилось в полном
определении класса, и поиск имени и другие языковые правила применяются к
полному определению класса, как если бы в нем находилось содержимое
разделяемых классов.
C++
public:
/*...*/
};
public:
};
public:
};
C++
public:
private:
};
Шаблоны
Разделяемый класс не может быть шаблоном.
Ограничения
Разделяемый класс не может распространяться за пределы одной записи
преобразования.
Примеры
В следующем примере класс Address определяется в двух файлах кода.
Конструктор изменяет файл Address.details.h , а пользователь — файл Address.h .
Ключевое слово partial используется только в определении класса в первом
файле.
C++
// Address.Details.h
private:
Platform::String^ street_;
Platform::String^ city_;
Platform::String^ state_;
Platform::String^ zip_;
Platform::String^ country_;
C++
// Address.h
#include "Address.details.h"
public:
};
Комментарии
Значение свойства содержится в закрытой переменной (называемой резервным
хранилищем), принадлежащей к тому же типу, что и само свойство. Свойство
может одновременно содержать метод доступа set, присваивающий значение
резервному хранилищу, и метод доступа get, извлекающий значение резервного
хранилища. Свойство доступно только для чтения, если оно предоставляет только
метод доступа get, только для записи, если предоставляет только метод доступа set,
и для чтения и записи, если предоставляет оба метода доступа.
Когда создается экземпляр класса ссылки C++/CX, его память перед вызовом
конструктора инициализируется нулями, таким образом, всем свойствам в качестве
значения по умолчанию назначается ноль или nullptr.
Примеры
В следующем примере кода показано, как объявить свойство и обратиться к нему.
Первое свойство Name является тривиальным , поскольку компилятор
автоматически создает метод доступа set , метод доступа get и резервное
хранилище.
Второе свойство Doctor доступно только для чтения, поскольку для него указан
блок property , в котором явно объявлен только метод доступа get . Поскольку
блок property объявлен, необходимо явно объявить резервное хранилище, то есть
закрытую переменную doctor_ класса String^. Обычно свойство, доступное только
для чтения, просто возвращает значение резервного хранилища. Только сам класс
может задавать значение резервного хранилища, обычно это происходит в
конструкторе.
Третье свойство Quantity доступно для чтения и записи, так как в нем объявлен
блок property, где объявлены оба метода доступа set и get .
C++
private:
Platform::String^ m_doctor;
int quantity;
public:
Name = name;
// Trivial property
// Read-only property
// Read-write property
if (value <= 0)
quantity = value;
};
private:
void GetPrescriptions()
p->Quantity = 5;
Platform::String^ s = p->Doctor;
int32 i = p->Quantity;
p2.Quantity = 10;
};
) Важно!
Итераторы прокси-сервера VectorIterator и VectorViewIterator
используют прокси-объекты VectoryProxy<T> и ArrowProxy<T> для
включения использования с контейнерами STL. Дополнительные
сведения см. в теме "Элементы VectorProxy" далее в этой статье.
Windows::Foundation::Collections::IObservableVector и
Windows::Foundation::Collections::IObservableMap определяют события,
инициируемые при разнообразных изменениях коллекции. Реализуя эти
интерфейсы, Platform::Collections::Map и Platform::Collections::Vector
поддерживают привязку данных с помощью коллекций XAML. Например, если
имеется объект Vector , данные которого связаны с Grid , то при добавлении
данных в коллекцию их изменения отражаются в пользовательском
интерфейсе таблицы.
) Важно!
C++
#include <collection.h>
#include <algorithm>
void Class1::Test()
vec->Append(1);
vec->Append(2);
vec->Append(3);
vec->Append(4);
vec->Append(5);
auto it =
unsigned int n;
n = vec->GetAt(4); // n = 3
// Insert an item.
// vec = 0, 1, 2, 3, 4, 5
vec->InsertAt(0, 0);
// Modify an item.
// vec = 0, 1, 2, 12, 4, 5,
vec->SetAt(3, 12);
// Remove an item.
//vec = 1, 2, 12, 4, 5
vec->RemoveAt(0);
// vec = 1, 2, 12, 4
vec->RemoveAtEnd();
C++
//#include <collection.h>
//#include <vector>
IVector<int>^ Class1::GetInts()
vector<int> vec;
vec.push_back(i);
Если имеется вектор строк, которые должны будут передаваться через интерфейс
ABI, необходимо решить, следует ли изначально создавать строки как типы
std::wstring или как типы Platform::String^ . Если предполагается выполнение
функции.
Элементы VectorProxy
Platform::Collections::VectorIterator и Platform::Collections::VectorViewIterator
позволяют использовать range for циклы и алгоритмы, такие как std::sort , с
контейнером IVector<T> . Однако невозможно получить доступ к элементам
IVector через отмену ссылки на указатель C++; доступ к ним можно получить
только с использованием методов GetAt и SetAt . Таким образом, эти итераторы
используют прокси-классы Platform::Details::VectorProxy<T> и
Platform::Details::ArrowProxy<T> для предоставления доступа к отдельным
C++
if (nullptr != temp)
// Use temp...
C++
//#include <collection.h>
m->Insert("Mike", 0);
m->Insert("Dave", 1);
m->Insert("Doug", 2);
m->Insert("Nikki", 3);
m->Insert("Kayley", 4);
m->Insert("Alex", 5);
m->Insert("Spencer", 6);
int i = m->Lookup("Doug");
return m->GetView();
операций поиска или вставки и часто передаете коллекцию через интерфейс ABI)
более рационально использовать класс Platform::Collections::Map с самого
начала, не затрачивая ресурсы на преобразование типа объекта std::map . В любом
случае следует избегать операций поиска и вставки в объектах IMap , поскольку из
всех трех типов он обладает самой низкой производительностью. Преобразование
в IMap следует выполнять только в момент передачи контейнера через интерфейс
ABI.
Типы коллекций
Коллекции подразделяются на четыре категории: изменяемые и доступные только
для чтения версии последовательных и ассоциативных коллекций. Кроме того,
C++/CX расширяет коллекции, предоставляя три класса итератора, упрощающие
доступ к коллекциям.
Класс Platform::Collections::Map
метода IndexOf() можно изменять. Это важно в основном для объектов Vector и
VectorView , содержащих структуры значения. Например, чтобы создать
Класс Platform::Collections::MapView
Класс Platform::Collections::Vector
Класс Platform::Collections::VectorView
Класс Platform::Collections::InputIterator
Класс Platform::Collections::VectorIterator
Iterators Функции
Platform::Collections::VectorIterator<T>
Начать/
end(Windows::Foundation::Collections::
(Внутреннее хранение IVector<T>)
Windows::Foundation::Collections:: IVector<T> и
int.)
Platform::Collections::VectorViewIterator<T>
Начать/ end (IVectorView<T>^)
Platform::Collections::InputIterator<T>
Начать/ end (IIterable<T>)
C++
namespace TemplateDemo
internal:
MyRefTemplate(T d) : data(d){}
public:
private:
T data;
};
template<>
internal:
//...
};
internal:
MyDerivedSpecialized() : MyRefTemplate<int>(5){}
};
internal:
MyDerived(){}
};
class MyStandardTemplate
public:
MyStandardTemplate(){}
private:
T data;
};
public:
MySpecializeBoth(){}
private:
MyDerivedSpecialized^ g;
MyStandardTemplate<Platform::String^>* n;
};
Характеристики
Интерфейс имеет следующие характеристики:
Объявление и использование
В следующем примере показан способ объявления интерфейса. Обратите
внимание, что интерфейс можно объявить или как класс, или как тип структуры.
C++
namespace InterfacesTest
};
void Play();
void Pause();
void Stop();
};
C++
public:
//IMediaPlayer
// ...
args->newState = PlayState::Playing;
args->oldState = PlayState::Stopped;
StateChanged(this, args);
}
private:
//...
};
C++
};
C++
Если интерфейс объявляет свойство, доступное только для получения или только
для задания, реализующий класс должен явно предоставить метод получения или
задания.
C++
//...
Platform::String^ get();
};
public:
//...
private:
Platform::String^ _title;
};
C++
Platform::String^ Draw();
};
Platform::String^ Draw();
};
public:
MyClass(){}
};
Универсальные интерфейсы
В C++/CX ключевое generic слово используется для представления
параметризованного типа среда выполнения Windows. Параметризованный тип
передается в метаданные и может использоваться кодом, который написан на
любом языке, поддерживающем параметры-типы. Среда выполнения Windows
определяет некоторые универсальные интерфейсы, например
Windows::Foundation::Collections::IVector<T>, но не поддерживает создание
общедоступных пользовательских универсальных интерфейсов в C++/CX. Однако
можно создавать закрытые универсальные интерфейсы.
Вот как можно использовать среда выполнения Windows типы для создания
универсального интерфейса:
C++
};
public:
virtual property
Windows::Foundation::Collections::IVector<MediaFile^>^ Files;
};
//...
};
public:
//IMediaPlayer
args->newState = PlayState::Playing;
args->oldState = PlayState::Stopped;
StateChanged(this, args);
}
//ILibraryClient
private:
MediaFileCollection^ fileCollection;
};
Параметр типа может быть любым типом среда выполнения Windows. Это
означает, что параметр-тип может быть ссылочным типом, типом значения,
классом интерфейса, делегатом, основным типом или открытым
перечислимым классом.
Комментарии
Объявление public enum class , не содержащее спецификатор доступа, например
public , обрабатывается как стандартное перечисление С++ с областью видимости.
Объявление public enum class или public enum struct может иметь базовый тип
любого целочисленного типа, хотя сам среда выполнения Windows требует, чтобы
тип был int32 или uint32 для перечисления флагов. Следующий синтаксис
описывает части объявления public enum class или public enum struct .
C++
// ...
C++
if (myLight == TrafficLight::Green)
//...
Примеры
В следующих примерах показано, как объявить перечисление.
C++
Zero,
One,
Two,
Three
};
None = 0,
First, // First == 1
Some = 5,
Many = 10
};
[Flags]
Mask0 = 0x0,
Mask2 = 0x2,
Mask4 = 0x4,
Mask8 = 0x8
};
Enum1 e1 = Enum1::One;
int v1 = static_cast<int>(e1);
int v2 = static_cast<int>(Enum2::First);
C++
C++
C++
Использование делегатов
При создании приложения универсальная платформа Windows часто вы работаете
с делегатом в качестве типа события, предоставляемого классом среда выполнения
Windows. Чтобы подписаться на событие, создайте экземпляр типа делегата, указав
функцию (или лямбда-выражение), соответствующее сигнатуре делегата. Затем
воспользуйтесь оператором += , чтобы передать объект делегата члену события в
классе. Это называется "подписаться на событие". Когда экземпляр класса
инициирует событие, вызывается ваша функция, а также другие обработчики,
которые были добавлены данным объектом или другими объектами.
Совет
В файле app.h:
C++
[Windows::Foundation::Metadata::WebHostHiddenAttribute]
void InitializeSensor();
void SensorReadingEventHandler(Windows::Devices::Sensors::LightSensor^
sender,
Windows::Devices::Sensors::LightSensorReadingChangedEventArgs^
args);
float m_oldReading;
Windows::Devices::Sensors::LightSensor^ m_sensor;
};
В файле app.cpp:
C++
void App::InitializeSensor()
m_sensor = LightSensor::GetDefault();
LightSensorReadingChangedEventArgs^>( this,
&App::SensorReadingEventHandler);
LightSensorReadingChangedEventArgs^
args)
{/*...*/}
2 Предупреждение
Совет
C++ IntelliSense не показывает полную сигнатуру делегата, а потому не
помогает определить конкретный тип параметра EventArgs. Чтобы определить
его тип, можно открыть Обозреватель объектов и просмотреть сведения о
методе Invoke делегата.
Объявление
Объявление делегата похоже на объявление функции, за исключением того что
делегат — это тип. Обычно делегат объявляется в области пространства имен, хотя
также можно вложить объявление делегата внутрь объявления класса. Следующий
делегат инкапсулирует любую функцию, принимающую аргумент ContactInfo^ и
возвращающую значение Platform::String^ .
C++
После объявления типа делегата можно объявить члены класса этого типа или
методы, принимающие в качестве параметров объекты этого типа. Метод или
функция также может возвращать тип делегата. В следующем примере метод
ToCustomString принимает делегат в качестве входного параметра. Этот метод
позволяет клиентскому коду предоставить пользовательскую функцию, которая
создает строку из некоторых или всех открытых свойств объекта ContactInfo .
C++
public:
ContactInfo(){}
//...other properties
return func(this);
};
7 Примечание
Символ "^" используется при обращении к типу делегата так же, как и с
любым ссылочным типом среда выполнения Windows.
Объявление события всегда имеет тип делегата. В этом примере показана типичная
сигнатура типа делегата в среда выполнения Windows:
C++
Platform::Object^ sender,
Windows::UI::Xaml::RoutedEventArgs^ e
);
C++
});
C++
//Client app
});
});
C++
VectorIterator<ContactInfo^> i = WFC::begin(m_contacts);
contacts->Append(del(ci));
});
return contacts;
Строительство
Делегат можно создать из любого из следующих объектов:
lambda
статическая функция;
указатель на член;
std::function.
C++
});
// Static function.
// Pointer to member.
// std::function
textBlock->Text = func(ci);
textBlock2->Text = func2(ci);
textBlock3->Text = func3(ci);
textBlock4->Text = func4(ci);
2 Предупреждение
Если используется лямбда-выражение, которое перехватывает указатель "this",
необходимо с помощью оператора -= явно отменить регистрацию в событии
до выхода из лямбда-выражения. Дополнительные сведения см. в статье
Events (Visual Basic) (События в Visual Basic).
Универсальные делегаты
Универсальные делегаты в C ++/CX имеют ограничения, аналогичные
объявлениям универсальных классов. Они не могут объявляться как открытые.
Можно объявить частный или внутренний универсальный делегат и использовать
его из C++, но клиенты .NET или JavaScript не могут использовать его, так как он не
создается в метаданные WINMD. В этом примере объявляется универсальный
делегат, который можно использовать только в коде C++:
C++
C++
MyEventHandler<float>^ myDelegate;
Делегаты и потоки
Делегат, как и объект функции, содержит код, выполняемый в некий момент в
будущем. Если код, который создает и передает делегат, и функция, которая
принимает и выполняет этот делегат, выполняются в одном и том же потоке,
действия относительно просты. Если этот поток является потоком
пользовательского интерфейса, делегат может напрямую манипулировать
объектами пользовательского интерфейса, такими как элементы управления XAML.
Исключения
В программе C++ можно вызывать и перехватывать исключение, которое исходит
от операции среда выполнения Windows, исключение, производное от
std::exception , или определяемый пользователем тип. Исключение среда
выполнения Windows необходимо создавать только в том случае, если оно
пересекает границу двоичного интерфейса приложения (ABI), например, когда код,
перехватывающий исключение, написан на JavaScript. Когда исключение C++ не
среда выполнения Windows достигает границы ABI, исключение преобразуется в
Platform::FailureException исключение, представляющее E_FAIL HRESULT.
Дополнительные сведения об интерфейсе ABI см. в разделе Creating Windows
Runtime Components in C++.
Примеры
В этом примере показано, как создать исключение среда выполнения Windows для
синхронных операций:
C++
if (argument->Length() == 0)
auto e = ref new Exception(-1, "I'm Zork bringing you this message
from across the ABI.");
throw e;
return MyMethodInternal(argument);
C++
try
result = obj->MyMethod(input);
catch (/*InvalidArgument*/Exception^ e)
Windows::Globalization::Calendar calendar;
//#include <string>
std::wstring ws(result->Data());
//...
Событие UnhandledErrorDetected
В Windows 8.1 вы можете подписаться на статическое событие
Windows::ApplicationModel::Core:CoreApplication::UnhandledErrorDetected, которое
предоставляет доступ к необработанным ошибкам, которые собираются привести
к сбою процесса. Независимо от того, где возникла ошибка, она достигнет этого
обработчика в виде объекта Windows::ApplicationModel::Core::UnhandledError ,
который передается с аргументами события. При вызове метода Propagate для
объекта он создает исключение Platform::*Exception типа, соответствующего коду
ошибки. В блоках catch можно при необходимости сохранить состояние
пользователя, а затем либо разрешить завершение процесса путем вызова throw ,
либо каким-либо образом вернуть программу в известное состояние. В следующем
примере демонстрируется использование основного подхода:
В файле app.xaml.h:
C++
В app.xaml.cpp:
C++
Windows::ApplicationModel::Core::CoreApplication::UnhandledErrorDetected +=
ref new EventHandler<UnhandledErrorDetectedEventArgs^>(this,
&App::OnUnhandledException);
try
err->Propagate();
// Catch any specific exception types if you know how to handle them
Комментарии
C++/CX не использует finally предложение .
Объявление
Событие можно объявить в классе ссылки или интерфейсе, задав для него режим
доступа public, internal (public/private), public protected, protected, private protected
или private accessibility. При объявлении события компилятор автоматически
создает объект, имеющий два метода доступа: add и remove. Когда
подписывающиеся объекты регистрируют обработчики событий, объект события
сохраняет их в коллекции. Когда происходит событие, объект события по очереди
вызывает все обработчики в списке. Тривиальное событие (такое как в следующем
примере) имеет неявно заданное резервное хранилище, а также неявно заданные
методы доступа add и remove . Разработчик также может определять собственные
методы доступа, аналогично тому как задаются пользовательские методы доступа
get и set в случае свойств. Реализующий класс не может "вручную" перебирать
список подписчиков на событие при возникновении тривиального события.
C++
namespace EventTest
public:
Class1(){}
void DoSomething()
//Do something....
};
Использование
В следующем примере показано, как подписывающийся класс с помощью
оператора += подписывается на событие и предоставляет обработчик событий,
вызываемый при возникновении этого события. Обратите внимание, что указанная
функция соответствует сигнатуре делегата, который определен на стороне издателя
в пространстве имен EventTest .
C++
namespace EventClient
public:
Subscriber() : eventCount(0)
publisher->SomethingHappened +=
this,
&Subscriber::MyEventHandler);
void SomeMethod()
publisher->DoSomething();
eventLog->Insert(eventCount, msg);
eventCount++;
private:
int eventCount;
EventTest::Class1^ publisher;
};
2 Предупреждение
C++
namespace EventTest2
public:
Class1(){}
void DoSomething(){/*...*/}
void MethodThatFires()
DoSomething();
Windows::Foundation::EventRegistrationToken
add(SomethingHappenedEventHandler^ handler)
//....
//....
_InternalHandler -= token;
//....
};
C++
namespace EventClient2
private:
bool handlerIsActive;
Platform::String^ lastMessage;
void TestMethod()
handlerIsActive = true;
Windows::Foundation::EventRegistrationToken cookie =
c1->SomethingHappened +=
c1->DoSomething();
handlerIsActive = false;
c1->SomethingHappened -= cookie;
if (!handlerIsActive)
return;
lastMessage = msg;
};
Комментарии
С одним событием может быть связано несколько обработчиков. Источник
события поочередно вызывает все обработчики событий из одного потока. Если
приемник события выполняет блокировку в методе обработчика событий, он не
позволяет источнику события вызывать другие обработчики для этого события.
Делегаты
static_cast
static_cast проверяется во время компиляции, чтобы определить, есть ли
C++
// ...
Class1^ c = static_cast<Class1^>(obj);
safe_cast
Оператор safe_cast является частью среда выполнения Windows. Он выполняет
проверку типов во время выполнения и создает исключение
Platform::InvalidCastException при невозможности преобразования. Используйте
safe_cast , если сбой во время выполнения указывает на исключительное условие.
Основная цель safe_cast заключается в выявлении ошибок программирования на
этапах разработки и тестирования на момент их возникновения. Обрабатывать
исключения не следует, поскольку необработанное исключение само определяет
точку сбоя.
C++
// the compiler can't tell this by comparing A and B. The run-time type
check succeeds.
B^ obj2 = safe_cast<B^>(obj);
dynamic_cast
Используйте dynamic_cast при приведение объекта (в частности, шляпу ^) к более
производного типа, предполагается, что целевой объект иногда может быть
nullptr или что приведение может завершиться ошибкой, и вы хотите обработать
это условие как обычный путь кода вместо исключения. Например, в шаблоне
проекта пустого приложения (универсального приложения Для Windows) метод в
app.xaml.cpp используется dynamic_cast для проверки наличия OnLaunched
содержимого в окне приложения. Это не ошибка, если она не имеет содержимого;
это ожидаемое условие. Windows::Current::Content является
Windows::UI::XAML::UIElement , а преобразование выполняется в тип
Windows::UI.XAML::Controls::Frame , который в иерархии наследования является
C++
void
App::OnLaunched(Windows::ApplicationModel::Activation::LaunchActivatedEventA
rgs^ args)
// Do not repeat app initialization when the window already has content,
if (rootFrame == nullptr)
// a SuspensionManager key
// ...
C++
#include <wrl.h>
// ...
Типы ABI
Типы ABI расположены в заголовках в Windows SDK. Для удобства имена
заголовков соответствуют именам пространств имен, например
windows.storage.h .
HSTRING String^
HSTRING* String^*
IInspectable* Object^
IInspectable** Object^*
IInspectable-derived-type* same-interface-from-winmd^
IInspectable-derived-type** same-interface-from-winmd^*
IDefault-interface-of-RuntimeClass* same-RefClass-from-winmd^
IDefault-interface-of-RuntimeClass** same-RefClass-from-winmd^*
C++
C++
namespace BoxingDemo
public:
Class1(){}
Platform::IBox<int>^ Multiply(Platform::IBox<int>^ a,
Platform::IBox<int>^ b)
return nullptr;
else
};
// C# client code
int? a = null;
int? b = 5;
Приведение (C++/CX)
Атрибут — это особый тип класса ссылок, который можно добавить в квадратные
скобки к среда выполнения Windows типам и методам для указания определенных
поведений при создании метаданных. В коде C++/CX обычно используются
несколько предопределенных атрибутов, например
Windows::Foundation::Metadata::WebHostHidden. В этом примере показано, как
атрибут применяется к классу.
C++
[Windows::Foundation::Metadata::WebHostHidden]
Настраиваемые атрибуты
Также можно определять настраиваемые атрибуты. Настраиваемые атрибуты
должны соответствовать следующим правилам среда выполнения Windows:
int32 (int)
bool
Platform::String^
Windows::Foundation::HResult
Platform::Type^
[Windows::Foundation::Metadata::WebHostHiddenAttribute]
public:
int Num;
Platform::String^ Msg;
};
[MyCustomAttribute(Num=5, Msg="Hello")]
public:
Class1();
};
U Внимание!
Пример
В следующем примере показано, как переводить в число нерекомендуемых
собственные открытые API, например в компоненте среды выполнения Windows.
Второй параметр типа Windows:Foundation::Metadata::DeprecationType указывает,
является ли API устаревшим или удаленным. В настоящее время поддерживается
DeprecationType::Deprecated только значение . Третий параметр в атрибуте
C++
public:
double ComputeAngularVelocity();
};
class
enum
event
method
property
struct field
delegate
enum field
interface
параметризованный constructили
struct
В этом разделе
Параметры компилятора и компоновщика
Статические библиотеки
библиотеки DLL
7 Примечание
Путь к библиотеке
Переменная среды %LIBPATH% определяет путь по умолчанию для поиска WINMD-
файлов.
Параметры компилятора
Параметр Описание
/ZW
Включает расширения языка среда выполнения Windows.
Параметры компоновщика
Параметр Описание
Комментарии
При использовании /ZWкомпилятор автоматически выполняет компоновку с
версией библиотеки DLL среды выполнения C (CRT). Связывание с версией
статической библиотеки запрещено, и любое использование функций CRT,
которые не разрешены в приложении универсальная платформа Windows, вызовет
ошибку времени компиляции.
Visual Studio можно использовать для создания стандартной библиотеки DLL Win32
или библиотеки DLL компонентов среда выполнения Windows, которую можно
использовать в приложениях универсальная платформа Windows (UWP).
Стандартная библиотека DLL, созданная с помощью версии Visual Studio или
компилятора Microsoft C++, более ранней, чем Visual Studio 2012, может
неправильно загружаться в приложение UWP и не пройти проверку приложения в
Microsoft Store.
Связанные темы
Интеграция с JavaScript
Интеграция с WRL
Windows::Foundation
Точка
Rect
Размер
Windows::UI
Цвет
Windows::UI::Xaml
CornerRadius
Duration
GridLength
Thickness
Windows::UI::Xaml::Interop
TypeName
Windows::UI::Xaml::Media
Матрица
Windows::UI::Xaml::Media::Animation
KeyTime
RepeatBehavior
Windows::UI::Xaml::Media::Media3D
Matrix3D
Разработка WRL
Дополнительные сведения о создании и использовании компонентов WRL см. в
статье среда выполнения Windows библиотеке шаблонов C++ (WRL).
Пример
В следующем фрагменте кода демонстрируется использование WRL и WRL для
использования среда выполнения Windows классов и проверки файла метаданных.
C++
#include <hstring.h>
#include <cor.h>
#include <rometadata.h>
#include <rometadataresolution.h>
#include <collection.h>
namespace ABI_Isolation_Workaround {
#include <inspectable.h>
#include <WeakReference.h>
#include <wrl/client.h>
IVector<String^>^ GetTypeMethods(Object^);
MainPage::MainPage()
InitializeComponent();
std::wstring strMethods;
strMethods += methodName->Data();
strMethods += L"\n";
});
wprintf_s(L"%s\n", strMethods.c_str());
HRESULT hr;
HSTRING hStringClassName;
hr = instance-
>__cli_GetRuntimeClassName(reinterpret_cast<__cli_HSTRING__**>
(&hStringClassName)); // internal method name subject to change post BUILD
if (FAILED(hr))
if (FAILED(hr))
HSTRING hStringFileName;
mdTypeDef typeDefToken;
hr = RoGetMetaDataFile(hStringClassName, metadataDispenser.Get(),
&hStringFileName, &metadataImport, &typeDefToken);
if (FAILED(hr))
HCORENUM hCorEnum = 0;
mdMethodDef methodDefs[2048];
if (FAILED(hr))
wchar_t methodName[1024];
ULONG countMethodName;
std::wstring strMethods;
countMethodName = sizeof(methodName);
hr = metadataImport->GetMethodProps(methodDefs[i], nullptr,
methodName, countMethodName, &countMethodName, nullptr, nullptr, nullptr,
nullptr, nullptr);
if (SUCCEEDED(hr))
methodName[ countMethodName ] = 0;
return retVal;
GetPointerToPixelData
Следующий метод принимает Windows::Storage::Streams::IBuffer и возвращает
необработанный указатель на соответствующий массив байтов. Чтобы вызвать
функцию, передайте свойство WriteableBitmap::PixelBuffer .
C++
#include <wrl.h>
#include <robuffer.h>
// Retrieves the raw pixel data from the provided IBuffer object.
// When the buffer has been released, the pointer becomes invalid
if (length != nullptr)
ComPtr<IBufferByteAccess> bufferByteAccess;
reinterpret_cast<IInspectable*>( pixelBuffer)-
>QueryInterface(IID_PPV_ARGS(&bufferByteAccess));
bufferByteAccess->Buffer(&pixels);
return pixels;
Полный пример
Ниже показано, как создать приложение универсальная платформа Windows C#,
которое передает в WriteableBitmap библиотеку DLL компонента C++ среда
выполнения Windows. Код C++ получает указатель на буфер пикселя,
выполняющий простое изменение изображения на месте. В качестве альтернативы
можно создать клиентское приложение на языке Visual Basic, JavaScript или C++, а
не на C#. При использовании C++ нет необходимости в компоненте DLL; можно
просто добавить эти методы непосредственно в класс MainPage или в какие-либо
другие классы.
Создание клиента
1. Используйте шаблон проекта пустого приложения для создания приложения
универсальная платформа Windows C#.
2. В файле MainPage.xaml
XML
<Grid Background="{StaticResource
ApplicationPageBackgroundThemeBrush}">
<Image x:Name="Pic"/>
</StackPanel>
</Grid>
3. В файле MainPage.xaml.cs
C#
using Windows.Storage;
using Windows.Storage.FileProperties;
using Windows.UI.Xaml.Media.Imaging;
using Windows.Storage.Streams;
using Windows.Storage.Pickers;
C#
C#
openPicker.ViewMode = PickerViewMode.Thumbnail;
openPicker.SuggestedStartLocation =
PickerLocationId.PicturesLibrary;
openPicker.FileTypeFilter.Add(".jpg");
openPicker.FileTypeFilter.Add(".jpeg");
openPicker.FileTypeFilter.Add(".png");
if (file != null)
m_bm.SetSource(await file.OpenReadAsync());
Pic.Source = m_bm;
else
// Handle error...
C#
await obj.Negativize(m_bm);
Pic.Source = m_bm;
2. В файле Class1.h
C++
[Windows::Foundation::Metadata::WebHostHidden]
C++
Windows::Foundation::IAsyncAction^
Negativize(Windows::UI::Xaml::Media::Imaging::WriteableBitmap^ bm);
3. В файле Class1.cpp
C++
#include <ppltasks.h>
#include <wrl.h>
#include <robuffer.h>
C++
temp[pos] = ~temp[pos];
temp[pos + 1] = ~temp[pos + 1] / 3;
temp[pos + 2] = ~temp[pos + 2] / 2;
});
7 Примечание
предупреждение компилятора.
public:
property
Windows::Security::Credentials::UI::CredentialPickerOptions^ Options
Windows::Security::Credentials::UI::CredentialPickerOptions^
get()
return _myOptions;
private:
Windows::Security::Credentials::UI::CredentialPickerOptions^
_myOptions;
};
using
'Platform::Agile<Windows::Security::Credentials::UI::CredentialPickerOptions>'
instead
instead Если воспользоваться типом Agile<T> , класс можно будет использовать как
любой другой гибкий класс. Используйте Platform::Agile<T> в следующих
ситуациях:
#include <agile.h>
public:
property
Windows::Security::Credentials::UI::CredentialPickerOptions^ Options
Windows::Security::Credentials::UI::CredentialPickerOptions^
get()
return m_myOptions.Get();
private:
Platform::Agile<Windows::Security::Credentials::UI::CredentialPickerOptions^
> m_myOptions;
};
[Threading(ThreadingModel::STA)]
[MarshalingBehavior(MarshalingType::None)]
};
MarshallingBehavior
Слабые ссылки и устранение циклов
(C++/CX)
Статья • 07.11.2022
Class1::Class1()
WeakReference wr(this);
Class1^ c = wr.Resolve<Class1>();
if (c != nullptr)
c->m_eventFired = true;
else
});
См. также
Заголовок Описание
Синтаксис
namespace default;
Члены
Все встроенные типы наследуют следующие члены.
Имя Описание
Встроенные типы
Имя Описание
Требования
Заголовок: vccorlib.h
Синтаксис
C++
bool Equals(
Object^ obj
Параметры
obj
Возвращаемое значение
Значение true , если объекты равны; в противном случае — значение false .
Требования
Минимальный поддерживаемый клиент: Windows 8
Заголовок: vccorlib.h
Синтаксис
C++
public:int GetHashCode();
Возвращаемое значение
Хэш-код данного экземпляра.
Требования
Минимальный поддерживаемый клиент: Windows 8
Заголовок: vccorlib.h
Синтаксис
C++
Platform::Type^ GetType();
Возвращаемое значение
Объект Platform::Type^, представляющий текущий объект.
Требования
Минимальный поддерживаемый клиент: Windows 8
Заголовок: vccorlib.h
Синтаксис
C++
String^ ToString();
Возвращаемое значение
Строка, представляющая текущий объект.
Требования
Минимальный поддерживаемый клиент: Windows 8
Заголовок: vccorlib.h
Синтаксис
C++
Члены
Атрибуты
attribute Описание
Флаги Указывает, что перечисление может обрабатываться как битовое поле (т. е.
набор флагов).
Классы
Класс Описание
Реализации интерфейса
Перечисления
Интерфейс Описание
Структуры
Структура Описание
Класс значения Тип данных без знака, используемый для представления размера
Platform::SizeT объекта.
Класс значений Указатель без знака, размер которого соответствует платформе (32-
Platform::UIntPtr разрядной или 64-разрядной).
Синтаксис
C++
Remarks
Если возникло это исключение, проверьте, что вы запросили соответствующую
возможность и указали необходимые объявления в манифесте пакета приложения.
Дополнительные сведения см. в статье COMException .
Требования
Минимальный поддерживаемый клиент: Windows 8
Метаданные: platform.winmd
Синтаксис
C++
class Agile;
Параметры
Комментарии
Большинство классов в среда выполнения Windows являются гибкими. Объект
Agile может вызывать внутрипроцессный или внепроцессный объект либо быть
вызванным таким объектом в том же или другом потоке. Если объект не является
объектом гибкой разработки, заключите его в объект Agile<T> , который является
объектом гибкой разработки. После этого объект Agile<T> можно маршалировать,
используя таким образом базовый объект, отличный от Agile.
Класс Agile<T> — это стандартный класс неуправляемого кода C++, для которого
требуется включаемый файл agile.h . Он представляет объект, отличный от Agile, и
контекстобъекта Agile. Контекст задает потоковую модель объекта Agile и
поведение маршалинга. Операционная система использует контекст для
определения способа маршалирования объекта.
Члены
Открытые конструкторы
name Описание
Открытые методы
name Описание
Открытые операторы
Имя Описание
Иерархия наследования
Object
Agile
Требования
Минимальный поддерживаемый клиент: Windows 8
Конструктор Agile::Agile
Инициализирует новый экземпляр класса Agile.
Синтаксис
C++
Agile();
Agile(T^ object);
Agile(Agile<T>&& object);
Параметры
object
Комментарии
Первая версия этого конструктора является конструктором по умолчанию. Вторая
версия инициализирует новый экземпляра класса Agile из объекта, указанного
параметром object . Третья версия является конструктором копирования.
Четвертая версия является конструктором перемещения. Этот конструктор не
может вызывать исключения.
Деструктор Agile::~Agile
Ликвидирует текущий экземпляр класса Agile.
Синтаксис
C++
~Agile();
Remarks
Этот деструктор также освобождает объект, представленный текущим объектом
Agile.
Метод Agile::Get
Возвращает дескриптор объекта, представленного текущим объектом Agile.
Синтаксис
C++
T^ Get() const;
Возвращаемое значение
Дескриптор объекта, представленного текущим объектом Agile.
Метод Agile::GetAddressOf
Повторно инициализирует текущий объект Agile и возвращает адрес дескриптора
для объекта типа T .
Синтаксис
C++
Параметры
T
Возвращаемое значение
Адрес дескриптора для объекта типа T .
Комментарии
Эта операция освобождает текущее представление объекта типа T при его
наличии, повторно инициализирует данные-члены объекта Agile, получает
текущий контекст потока, а затем возвращает адрес переменной дескриптора для
объекта, который может представлять объект, отличный от Agile. Чтобы экземпляр
класса Agile представлял объект, используйте оператор присваивания
(Agile::operator=), чтобы назначить объект экземпляру класса Agile.
Метод Agile::GetAddressOfForInOut
Возвращает адрес дескриптора объекта, представленного текущим объектом Agile.
Синтаксис
C++
Параметры
Возвращаемое значение
Адрес дескриптора объекта, представленного текущим объектом Agile.
Комментарии
Эта операция получает текущий контекст потоков, затем возвращает адрес
дескриптора основного объекта.
Метод Agile::Release
Отменяет базовый объект и контекст текущего объекта Agile.
Синтаксис
C++
Remarks
Выполняется отмена базового объекта и контекста текущего объекта Agile, если
они существуют, а затем значению объекта Agile присваивается NULL.
Оператор Agile::operator->
Извлекает дескриптор объекта, представленного текущим объектом Agile.
Синтаксис
C++
Возвращаемое значение
Дескриптор объекта, представленного текущим объектом Agile.
Оператор Agile::operator=
Присваивает указанный объект текущему объекту Agile.
Синтаксис
C++
Параметры
T
object
Lp
Возвращаемое значение
Дескриптор для объекта типа T
Комментарии
Первая версия оператора присваивания копирует дескриптор ссылочного типа в
текущий объект Agile. Вторая версия копирует ссылку на тип Agile в текущий
объект Agile. Третья версия перемещает тип Agile в текущий объект Agile.
Четвертая версия перемещает указатель на COM-объект в текущий объект Agile.
Синтаксис
C++
public IBoxArray<TArg>
Члены
Platform::Array наследует все свои методы от класса Platform::WriteOnlyArray и
реализует Value свойство интерфейса Platform::IBoxArray.
Открытые конструкторы
name Описание
Методы
См . раздел Класс Platform::WriteOnlyArray.
Свойства
Имя Описание
Комментарии
Класс Array является запечатанным и наследовать его нельзя.
Требования
Параметр компилятора: /ZW
Конструкторы массивов
Инициализирует изменяемый одномерный массив типов, заданный параметром
шаблона класса T.
Синтаксис
C++
Параметры
T
size
data
Array::get - метод
Извлекает ссылку на элемент массива с указанным индексом.
Синтаксис
C++
Параметры
index
Возвращаемое значение
Элемент массива, заданный параметром index .
Array::Value - свойство
Получает дескриптор текущего массива.
Синтаксис
C++
Возвращаемое значение
Дескриптор текущего массива.
См. также раздел
Пространство имен Platform
Синтаксис
C++
class ArrayReference
Члены
Открытые конструкторы
name Описание
Открытые операторы
Имя Описание
Исключения
Remarks
Использование ArrayReference для заполнения массива в стиле языка C позволяет
избежать дополнительной операции копирования, которая потребовалось бы при
копировании сначала в переменную Platform::Array , а затем в массив в стиле
языка C. При использовании ArrayReference выполняется только одна операция
копирования. Пример кода см. в разделах Array и WriteOnlyArray.
Требования
Минимальный поддерживаемый клиент: Windows 8
Заголовок: vccorlib.h
Конструктор ArrayReference::ArrayReference
Инициализирует новый экземпляр класса Platform::ArrayReference .
Синтаксис
C++
ArrayReference(ArrayReference&& otherArg)
Параметры
dataArg
sizeArg
otherArg
Комментарии
Оператор ArrayReference::operator=
Назначает указанный объект текущему объекту Platform::ArrayReference с помощью
семантики перемещения.
Синтаксис
C++
Параметры
otherArg
Возвращаемое значение
Ссылка на объект типа ArrayReference .
Комментарии
Platform::ArrayReference — это стандартный шаблон класса C++, а не ссылочный
класс.
Оператор ArrayReference::operator()
Преобразует текущий объект Platform::ArrayReference обратно в класс
Platform::Array .
Синтаксис
C++
Возвращаемое значение
Дескриптор для объекта типа Array<TArg>^
Комментарии
Platform::ArrayReference — это стандартный шаблон класса C++, а Platform::Array —
класс ссылки.
Синтаксис
C++
Члены
Класс Boolean имеет методы Equals(), GetHashCode() и ToString(), наследуемые от
Platform::Object Class, и метод GetTypeCode(), наследуемый от Platform::Type Class.
Требования
Минимальный поддерживаемый клиент: Windows 8
Метаданные: platform.winmd
Синтаксис
C++
Требования
Заголовок: vccorlib.h
Члены
Член Описание
Конструктор Box::Box
Создает объект Box , который может инкапсулировать значение указанного типа.
Синтаксис
C++
Box(T valueArg);
Параметры
валуеарг
Синтаксис
C++
Параметры
T
Возвращаемое значение
Platform::Box<T>^ Экземпляр, представляющий исходное значение, упакованное в
класс ссылки.
Синтаксис
C++
Параметры
T
Возвращаемое значение
Platform::Box<T>^ Экземпляр, представляющий исходное значение, упакованное в
класс ссылки.
Синтаксис
C++
Параметры
T
Возвращаемое значение
Platform::Box<T>^ Экземпляр, представляющий исходное значение, упакованное в
класс ссылки.
Синтаксис
C++
Параметры
T
Возвращаемое значение
Platform::Box<T>^ Экземпляр, представляющий исходное значение, упакованное в
класс ссылки.
Оператор Box::operator T
Позволяет осуществлять преобразования-упаковки класса значений T или enum
класса T в Box<T> .
Синтаксис
C++
Параметры
T
Возвращаемое значение
Platform::Box<T>^ Экземпляр, представляющий исходное значение, упакованное в
класс ссылки.
Свойство Box::Value
Возвращает значение, которое инкапсулируется в объекте Box .
Синтаксис
C++
T get();
Возвращаемое значение
Возвращает упакованное значение с тем же типом, который у него был до
упаковки.
См. также
Пространство имен Platform
Упаковка-преобразование
Platform::CallbackContext -
перечисление
Статья • 03.04.2023
Синтаксис
C++
Члены
Требования
Минимальный поддерживаемый клиент: Windows 8
Метаданные: platform.winmd
Класс Platform::ChangedStateException
Статья • 03.04.2023
Создается, если внутреннее состояние объекта было изменено, тем самым делая
недействительными результаты метода.
Синтаксис
C++
Remarks
Один из примеров ситуаций, когда создается это исключение: метод итератора
коллекции или представления коллекции вызван после изменения родительской
коллекции, что делает результаты метода недействительными.
Требования
Минимальный поддерживаемый клиент: Windows 8
Метаданные: platform.winmd
Синтаксис
C++
Remarks
Дополнительные сведения см. в описании класса COMException .
Требования
Минимальный поддерживаемый клиент: Windows 8
Метаданные: platform.winmd
Синтаксис
C++
Члены
Класс COMException наследует от класса Object и интерфейсов IException, IPrintable
и IEquatable.
Конструкторы
Член Описание
Методы
Свойства
Член Описание
Требования
Минимальный поддерживаемый клиент: Windows 8
Метаданные: platform.winmd
COMException::COMException - конструктор
Инициализирует новый экземпляр класса COMException.
Синтаксис
C++
Параметры
Hresult
COMException::HResult - свойство
Значение HRESULT, соответствующее исключению.
Синтаксис
C++
public:
Значение свойства
Значение HRESULT, задающее ошибку.
Комментарии
Дополнительные сведения о том, как интерпретировать значение HRESULT, см. в
разделе Структура кодов ошибок COM.
COMException::Message - свойство
Сообщение с описанием исключения.
Синтаксис
C++
Значение свойства
Описание исключения.
Синтаксис
C++
Члены
Класс Delegate имеет методы Equals(), GetHashCode() и ToString(), производные от
Platform::Object Class.
Комментарии
Для создания делегатов используйте ключевое слово delegate ; не используйте
Platform::Delegate явным образом. Дополнительные сведения см. в разделе
Делегаты. Пример создания и использования делегата см. в разделе Creating
Windows Runtime Components in C++.
Требования
Минимальный поддерживаемый клиент: Windows 8
Метаданные: platform.winmd
Синтаксис
Remarks
Если класс A ссылается на другой класс (класс B) в отдельном процессе, то классу A
требуется прокси-объект для связи с находящимся вне процесса сервером COM,
который содержит класс B. Иногда серверу может не хватать памяти, а класс A об
этом не знает. В этом случае вызывается исключение RPC_E_DISCONNECTED и
преобразуется в исключение Platform::DisconnectedException. Один из сценариев, в
котором это происходит, связан с ситуацией, когда источник события вызывает
предоставленного ему делегата, но делегат был удален в некоторой точке после
своей подписки на событие. Когда это происходит, источник события удаляет
делегата из своего списка вызова.
Требования
Минимальный поддерживаемый клиент: Windows 8
Метаданные: platform.winmd
Синтаксис
C++
Члены
Класс Enum наследует методы Equals(), GetHashCode() и ToString() от Platform::Object
Class.
Комментарии
Используйте ключевое слово public enum class для создания перечислений. Не
используйте тип Platform::Enum в явном виде. Дополнительные сведения см. в
разделе Перечисления.
Требования
Минимальный поддерживаемый клиент: Windows 8
Метаданные: platform.winmd
Синтаксис
C++
Члены
Класс Exception наследуется от класса Object и интерфейсов IException ,
IPrintable и IEquatable .
Конструкторы
Член Описание
Методы
Класс Exception наследует методы Equals() ,
Finalize() , GetHashCode() , GetType() , MemberwiseClose() и ToString() из
Член Описание
Член Описание
Требования
Минимальный поддерживаемый клиент: Windows 8
Метаданные: platform.winmd
Exception::CreateException - метод
Создает Platform::Exception^ из указанного значения HRESULT.
Синтаксис
C++
Параметры
ч
Значение HRESULT, которое, как правило, получается из вызова метода COM. Если
значение равно 0, равное S_OK, этот метод вызывает исключение
Platform::InvalidArgumentException , так как успешные COM-методы не должны
вызывать исключения.
message
Комментарии
Используйте этот метод для создания исключения из значения HRESULT,
возвращаемого, например, из вызова интерфейса COM. Можно использовать
перегруженный метод, принимающий параметр String^, чтобы предоставить
пользовательское сообщение.
Exception::Exception - конструктор
Инициализирует новый экземпляр класса Exception.
Синтаксис
C++
Exception(int32 hresult);
Параметры
Hresult
message
Exception::HResult - свойство
Значение HRESULT, соответствующее исключению.
Синтаксис
C++
public:
Значение свойства
Значение HRESULT.
Комментарии
Большинство исключений создаются как ошибки модели COM, которые
возвращаются в виде значений HRESULT. C++/CX преобразует эти значения в
объекты Platform::Exception^, и это свойство сохраняет значение исходного кода
ошибки.
Свойство Exception::Message
Сообщение с описанием ошибки.
Синтаксис
C++
Значение свойства
В исключениях, создаваемых в среде выполнения Windows, это предоставляемое
системой описание ошибки.
Комментарии
В Windows 8 это свойство доступно только для чтения, так как исключения в этой
версии среда выполнения Windows передаются через ABI только как HRESULTS. В
Windows 8.1 через интерфейс ABI передается более подробная информация об
исключениях, и можно задать пользовательское сообщение, к которому другие
компоненты могут обращаться программным образом. Дополнительные сведения
см. в разделе Исключения (C++/CX)..
Синтаксис
C++
Remarks
Дополнительные сведения см. в описании класса COMException .
Требования
Минимальный поддерживаемый клиент: Windows 8
Метаданные: platform.winmd
Синтаксис
C++
Члены
Platform::Guid Equals() содержит методы , и ToString() , GetHashCode() производные
Член Описание
Комментарии
Для создания нового Platform::Guid используйте статический метод
Windows::Foundation::GuidHelper::CreateNewGuid .
Требования
Минимальный поддерживаемый клиент: Windows 8
Метаданные: platform.winmd
Конструкторы Guid::Guid
Инициализирует новый экземпляр Platform::Guid .
Синтаксис
C++
Guid(
unsigned int a,
unsigned short b,
unsigned short c,
unsigned char d,
unsigned char e,
unsigned char f,
unsigned char g,
unsigned char h,
unsigned char i,
unsigned char j,
unsigned char k );
Guid(GUID m);
Guid(
unsigned int a,
unsigned short b,
unsigned short c,
Array<unsigned char>^ n );
Параметры
a
Оператор Guid::operator==
Сравнивает два экземпляра Platform::Guid на предмет их равенства.
Синтаксис
C++
Параметры
guid1
Возвращаемое значение
Значение true, если два Platform::Guid экземпляра равны.
Комментарии
Предпочитать использовать == оператор вместо статического метода
Windows::Foundation::GuidHelper::Equals .
Оператор Guid::operator!=
Сравнивает два экземпляра Platform::Guid на неравенство.
Синтаксис
C++
Параметры
guid1
guid2
Возвращаемое значение
Значение true, если два Platform::Guid экземпляра не равны.
Оператор Guid::operator<
Сравнивает два Platform::Guid экземпляра для упорядочения.
Синтаксис
C++
Параметры
guid1
guid2
Возвращаемое значение
Значение true, если guid1 упорядочен до guid2. Порядок является
лексикографическим после того, как каждый из них Platform::Guid обрабатывается
как массив из четырех 32-разрядных значений без знака. Это не упорядочение,
используемое SQL Server или платформа .NET Framework, и не то же самое, что
лексикографическое упорядочение по строкового представления.
Оператор Guid::operator()
Неявно преобразует в Platform::Guid структуру GUID.
Синтаксис
C++
Возвращаемое значение
Структура GUID.
См. также раздел
Пространство имен Platform
Интерфейс Platform::IBox
Статья • 03.04.2023
Синтаксис
C++
Параметры
T
Комментарии
Интерфейс IBox<T> в основном используется внутри кода для представления типов
значений, допускающих значение null, как описано в разделе Классы и структуры
значения (C++/CX). Этот интерфейс также используется для упаковки типов
значений, передаваемых в методы C++, которые принимают параметры типа
Object^ . Можно в явном виде определить входной параметр как
IBox<SomeValueType> . Пример см. в разделе Boxing.
Требования
Элементы
Интерфейс Platform::IBox наследуется от интерфейса Platform::IValueType .
Интерфейс IBox содержит следующие члены:
Свойства
Метод Описание
Синтаксис
C++
Параметры
T
Комментарии
Пример см. в разделе Boxing.
Синтаксис
C++
Параметры
T
Комментарии
IBoxArray — это имя C++/CX для Windows::Foundation::IReferenceArray .
Элементы
Интерфейс IBoxArray наследует от интерфейса IValueType . Интерфейс IBoxArray
также содержит следующие члены:
Метод Описание
Свойство IBoxArray::Value
Возвращает значение, которое было изначально сохранено в этом объекте.
Синтаксис
C++
Параметры
T
Комментарии
Пример см. в разделе Boxing.
Синтаксис
C++
Атрибуты
GuidAttribute("de0cbaea-8065-4a45-b196-c9d443f9bab3")
VersionAttribute(NTDDI_WIN8)
Элементы
Интерфейс IDisposable наследует от интерфейса IUnknown. Интерфейс IDisposable
также имеет следующие типы членов.
Методы
Метод Описание
Требования
Минимальный поддерживаемый клиент: Windows 8
Синтаксис
C++
Члены
Класс IntPtr имеет следующие члены:
Член Описание
Требования
Минимальный поддерживаемый клиент: Windows 8
Метаданные: platform.winmd
IntPtr::IntPtr - конструктор
Инициализирует новый экземпляр класса IntPtr, используя указанное значение.
Синтаксис
C++
Параметры
value
Оператор IntPtr::op_explicit
Преобразует указанный параметр в объект IntPtr или указатель на значение IntPtr.
Синтаксис
C++
Параметры
value1
value2
value3
Объект IntPtr.
Возвращаемое значение
Первый и второй операторы возвращают IntPtr. Третий оператор возвращает
указатель на значение, представленное текущим объектом IntPtr.
Метод IntPtr::ToInt32
Преобразует текущее значение IntPtr в 32-битовое целое число.
Синтаксис
C++
int32 IntPtr::ToInt32();
Возвращаемое значение
32-битное целое число.
Синтаксис
C++
Remarks
Дополнительные сведения см. в описании класса COMException .
Требования
Минимальный поддерживаемый клиент: Windows 8
Метаданные: platform.winmd
Синтаксис
C++
Remarks
Дополнительные сведения см. в описании класса COMException .
Требования
Минимальный поддерживаемый клиент: Windows 8
Метаданные: platform.winmd
Синтаксис
C++
Синтаксис
Члены
Открытые конструкторы
name Описание
Открытые методы
Атрибут MTAThreadAttribute наследуется от класса Platform::Object. Атрибут
MTAThreadAttribute также перегружает или имеет следующие члены:
Имя Описание
Иерархия наследования
Platform
Требования
Метаданные: platform.winmd
Конструктор MTAThreadAttribute
Инициализирует новый экземпляр класса MTAThreadAttribute.
Синтаксис
C++
public:MTAThreadAttribute();
MTAThreadAttribute::Equals
Определяет, равен ли указанный объект текущему объекту.
Синтаксис
C++
Параметры
obj
Возвращаемое значение
Значение true , если объекты равны, в противном случае — значение false .
MTAThreadAttribute::GetHashCode
Возвращает хэш-код данного экземпляра.
Синтаксис
C++
public:int GetHashCode();
Возвращаемое значение
Хэш-код данного экземпляра.
MTAThreadAttribute::ToString
Возвращает строку, представляющую текущий объект.
Синтаксис
C++
public:String^ ToString();
Возвращаемое значение
Строка, представляющая текущий объект.
Синтаксис
C++
Remarks
Дополнительные сведения см. в описании класса COMException .
Требования
Минимальный поддерживаемый клиент: Windows 8
Метаданные: platform.winmd
Синтаксис
C++
Remarks
Дополнительные сведения см. в описании класса COMException .
Требования
Минимальный поддерживаемый клиент: Windows 8
Метаданные: platform.winmd
Синтаксис
C++
Члены
Открытые конструкторы
name Описание
Открытые методы
name Описание
Иерархия наследования
Object
Object
Требования
Заголовок: vccorlib.h
Метод Object::Equals
Определяет, равен ли указанный объект текущему объекту.
Синтаксис
C++
bool Equals(
Object^ obj
Параметры
obj
Возвращаемое значение
Значение true , если объекты равны; в противном случае — значение false .
Метод Object::GetHashCode
Возвращает значение идентификатора IUnknown * для этого экземпляра, если это
COM-объект, или вычисляемое хэш-значение, если это не COM-объект.
Синтаксис
C++
public:int GetHashCode();
Возвращаемое значение
Числовое значение, которое однозначно идентифицирует этот объект.
Комментарии
Можно использовать GetHashCode для создание ключей объектов в
сопоставлениях. Вы можете сравнить хэш-коды с помощью object::Equals. Если эта
ветвь выполнения кода очень важна, а GetHashCode и Equals работают
недостаточно быстро, можно перейти вниз на соответствующий уровень COM и
выполнять сравнение указателей IUnknown в неуправляемом коде.
Метод Object::GetType
Возвращает объект Platform::Type , описывающий тип среды выполнения объекта.
Синтаксис
C++
Object::GetType();
Комментарии
Статический Type::GetTypeCode можно использовать для получения значения
перечисления Platform::TypeCode , представляющего текущий тип. Это наиболее
полезно для встроенных типов. Код типа для любого класса ссылки, кроме
Platform::String , имеет значение Object (1).
rootFrame->Navigate(TypeName(MainPage::typeid), e->Arguments);
Конструктор Object::Object
Инициализирует новый экземпляр класса Object.
Синтаксис
C++
public:Object();
Метод Object::ReferenceEquals
Определяет, являются ли указанные экземпляры класса Object одним и тем же
экземпляром.
Синтаксис
C++
Параметры
obj1
obj2
Синтаксис
C++
public:
Возвращаемое значение
Строка, представляющая текущий объект. Этот метод можно переопределить,
чтобы ссылочный класс или структура содержали пользовательскую строку
сообщения:
C++
public:
Tree(){}
};
};
Класс Platform::Type
Система типов
Класс
Platform::ObjectDisposedException
Статья • 03.04.2023
Синтаксис
C++
Remarks
Дополнительные сведения см. в описании класса COMException.
Требования
Минимальный поддерживаемый клиент: Windows 8
Метаданные: platform.winmd
Синтаксис
C++
Remarks
Дополнительные сведения см. в описании класса COMException .
Требования
Минимальный поддерживаемый клиент: Windows 8
Метаданные: platform.winmd
Синтаксис
C++
Remarks
Дополнительные сведения см. в описании класса COMException .
Требования
Минимальный поддерживаемый клиент: Windows 8
Метаданные: platform.winmd
Синтаксис
C++
Remarks
Дополнительные сведения см. в описании класса COMException .
Требования
Минимальный поддерживаемый клиент: Windows 8
Метаданные: platform.winmd
Синтаксис
C++
Параметры
ч
Синтаксис
C++
Элементы
Член Описание
Требования
Минимальный поддерживаемый клиент: Windows 8
Метаданные: platform.winmd
SizeT::SizeT - конструктор
Инициализирует новый экземпляр класса SizeT указанным значением.
Синтаксис
C++
Параметры
value1
value2
Синтаксис
Члены
Открытые конструкторы
name Описание
Открытые методы
Атрибут STAThreadAttribute наследуется от класса Platform::Object. Атрибут
STAThreadAttribute также перегружает или имеет следующие члены:
Имя Описание
Иерархия наследования
Platform
Требования
Заголовок: collection.h
STAThreadAttribute - конструктор
Инициализирует новый экземпляр класса STAThreadAttribute.
Синтаксис
C++
public:STAThreadAttribute();
STAThreadAttribute::Equals
Определяет, равен ли указанный объект текущему объекту.
Синтаксис
C++
Параметры
obj
Возвращаемое значение
Значение true , если объекты равны, в противном случае — значение false .
STAThreadAttribute::GetHashCode
Возвращает хэш-код данного экземпляра.
Синтаксис
C++
public:int GetHashCode();
Возвращаемое значение
Хэш-код данного экземпляра.
STAThreadAttribute::ToString
Возвращает строку, представляющую текущий объект.
Синтаксис
C++
public:String^ ToString();
Возвращаемое значение
Строка, представляющая текущий объект.
Синтаксис
C++
IDisposable,
IEquatable,
IPrintable
Iterators
Две функции итератора, которые не являются членами класса String, можно
использовать с шаблоном std::for_each функции для перечисления символов в
объекте String.
Член Описание
Элементы
Класс String наследует от класса Object и интерфейсов IDisposable, IEquatable и
IPrintable.
Конструкторы
Член Описание
Член Описание
Методы
Класс String наследует методы Equals(), Finalize(), GetHashCode(), GetType(),
MemberwiseClose() и ToString() от класса Platform::Object Class. Класс String содержит
также следующие методы.
Метод Описание
Операторы
Класс String имеет следующие операторы.
Член Описание
Член Описание
Требования
Минимальный поддерживаемый клиент: Windows 8
Метод String::Begin
Возвращает указатель на начало текущей строки.
Синтаксис
C++
char16* Begin();
Возвращаемое значение
Указатель на начало текущей строки.
Метод String::CompareOrdinal
Статический метод, сравнивающий два String объекта путем вычисления
числовых значений соответствующих символов в двух строковых значениях,
представленных объектами.
Синтаксис
C++
Параметры
str1
str2
Возвращаемое значение
Целое число, выражающее лексическое соотношение двух сравниваемых
значений. В следующей таблице перечислены возможные возвращаемые
значения.
Значение Условие
Метод String::Concat
Объединяет значения двух объектов String.
Синтаксис
C++
String^ Concat( String^ str1, String^ str2);
Параметры
str1
str2
Возвращаемое значение
Новый объект String^, значение которого является объединением значений str1 и
str2 .
Если str1 имеет значение null , а str2 — значение, отличное от null, возвращается
значение str1 . Если str2 имеет значение null , а str1 — значение, отличное от
null, возвращается значение str2 . Если оба параметра str1 и str2 имеют значение
null , возвращается пустая строка (L"").
Метод String::Data
Возвращает указатель на начало буфера данных объекта в качестве массива
элементов char16 ( wchar_t ) в стиле языка C.
Синтаксис
C++
Возвращаемое значение
Указатель на начало const char16 массива символов Юникода ( char16 является
определением типа). wchar_t
Комментарии
Используйте этот метод для преобразования из Platform::String^ в wchar_t* . Когда
объект String выходит за пределы области, указатель Data больше не является
гарантированно допустимым. Чтобы сохранить данные за пределами времени
существования исходного String объекта, используйте wcscpy_s для копирования
массива в память, выделенную самостоятельно.
Метод String::Dispose
Высвобождает ресурсы.
Синтаксис
C++
Метод String::End
Возвращает указатель на позицию после конца текущей строки.
Синтаксис
C++
char16* End();
Возвращаемое значение
Указатель на позицию после конца текущей строки.
Комментарии
End() возвращает Begin() + Length.
Метод String::Equals
Указывает, совпадает ли значение заданного объекта String со значением текущего
объекта.
Синтаксис
C++
Параметры
str
Возвращаемое значение
Значение true , если str равен текущему объекту; в противном случае — значение
false .
Комментарии
Этот метод эквивалентен статической строке::CompareOrdinal. В первой перегрузке
предполагается, что параметр str может быть приведен к объекту String^.
Метод String::GetHashCode
Возвращает хэш-код данного экземпляра.
Синтаксис
C++
Возвращаемое значение
Хэш-код данного экземпляра.
Метод String::IsEmpty
Указывает, является ли объект String пустым.
Синтаксис
C++
bool IsEmpty();
Возвращаемое значение
true , если текущий String объект имеет значение NULL или пустую строку (L"); в
противном случае false .
Метод String::IsFastPass
Указывает, участвует ли текущий объект String в операции быстрого прохода . В
операции быстрой передачи подсчет ссылок приостанавливается.
Синтаксис
C++
bool IsFastPass();
Возвращаемое значение
true Значение , false если текущий String объект находится в быстром прошлом; в
противном случае .
Комментарии
При вызове функции, где в качестве параметра используется объект с подсчетом
ссылок и вызываемая функция обращается к этому объекту только для чтения,
компилятор может безопасно приостановить подсчет ссылок, чтобы повысить
производительность вызова. Это свойство не дает никакой дополнительной пользы
для вашего кода. Система обрабатывает все сведения.
Метод String::Length
Извлекает количество символов в текущем String объекте.
Синтаксис
C++
Возвращаемое значение
Количество символов в текущем String объекте.
Комментарии
Длина объекта String без символов равна нулю. Длина следующего объекта String
равна 5.
C++
Оператор String::operator+
Объединяет два объекта String в новый объект String .
Синтаксис
C++
Параметры
str1
Возвращаемое значение
true Значение str1 , если значение str1 равно str2; false в противном случае .
Комментарии
Этот оператор создает объект String^ , содержащий данные из двух операндов.
Используйте его для удобства, если производительность не играет решающей
роли. Несколько вызовов " + " в функции, скорее всего, не будут иметь последствий,
но если вы имеете дело с большими объектами или текстовыми данными в
сложном цикле, используйте стандартные механизмы и типы C++.
Оператор String::operator==
Указывает, равны ли текстовые значения двух указанных объектов String.
Синтаксис
C++
Параметры
str1
str2
Возвращаемое значение
true Значение str1 , false если содержимое равно str2 ; в противном случае .
Комментарии
Этот оператор эквивалентен String::CompareOrdinal.
String::operator>
Указывает, больше ли значение одного String объекта, чем значение второго
String объекта.
Синтаксис
C++
Параметры
str1
str2
Возвращаемое значение
Значение true , если значение str1 больше str2 ; в противном случае — значение
false .
Комментарии
Этот оператор эквивалентен явному вызову String::CompareOrdinal и получен
результат больше нуля.
String::operator>=
Указывает, больше ли значение одного String объекта или равно значению
второго String объекта.
Синтаксис
C++
bool String::operator>=( String^ str1, String^ str2);
Параметры
str1
str2
Возвращаемое значение
Значение true , если значение str1 больше или равно значению str2 ; в
противном случае — значение false .
String::operator!=
Указывает, имеют ли два указанных String объекта разные значения.
Синтаксис
C++
Параметры
str1
str2
Возвращаемое значение
true , если значения str1 и str2 не равны; в противном случае — false .
String::operator<
Указывает, меньше ли значение одного String объекта, чем значение второго
String объекта.
Синтаксис
C++
Параметры
str1
str2
Возвращаемое значение
true Значение str1, если значение str1 меньше значения str2; false в противном
случае .
Конструктор String::String
Инициализирует новый экземпляр String класса копией входных строковых
данных.
Синтаксис
C++
String();
String(char16* s);
Параметры
s
Комментарии
Если производительность является критической и вы управляете временем
существования исходной строки, можно использовать Platform::StringReference
вместо String.
Пример
C++
String^ s = L"Hello!";
String::ToString
String Возвращает объект, значение которого совпадает с текущей строкой.
Синтаксис
C++
String^ String::ToString();
Возвращаемое значение
Объект String , значение которого совпадает с текущей строкой.
Синтаксис
C++
class StringReference
Remarks
Члены
Открытые конструкторы
name Описание
Открытые методы
name Описание
Открытые операторы
Имя Описание
Имя Описание
Требования
Минимальный поддерживаемый клиент: Windows 8
Заголовок: vccorlib.h
Метод StringReference::Data
Возвращает содержимое этой строки StringReference как массив значений char16.
Синтаксис
C++
Возвращаемое значение
Массив текстовых символов ЮНИКОДА char16.
Метод StringReference::GetHSTRING
Возвращает содержимое строки как __abi_HSTRING .
Синтаксис
C++
Возвращаемое значение
Объект __abi_HSTRING , который содержит строковые данные.
Комментарии
Метод StringReference::GetString
Возвращает содержимое строки как Platform::String^ .
Синтаксис
C++
__declspec(no_release_return) __declspec(no_refcount)
Возвращаемое значение
Объект Platform::String^ , который содержит строковые данные.
Метод StringReference::Length
Возвращает число символов в строке.
Синтаксис
C++
Возвращаемое значение
Целое число без знака, указывающее число символов в строке.
Комментарии
Оператор StringReference::operator=
Присваивает указанный объект текущему объекту StringReference .
Синтаксис
C++
Параметры
__fstrArg
__strArg
Возвращаемое значение
Ссылка на объект типа StringReference .
Комментарии
Так как StringReference является стандартным классом C++, а не классом ссылки,
он не отображается в обозревателе объектов.
Оператор StringReference::operator()
Преобразует объект StringReference в объект Platform::String^ .
Синтаксис
C++
__declspec(no_release_return) __declspec(no_refcount)
Возвращаемое значение
Дескриптор для объекта типа Platform::String .
Конструктор StringReference::StringReference
Инициализирует новый экземпляр класса StringReference .
Синтаксис
C++
StringReference();
Параметры
__fstrArg
__strArg
__lenArg
Комментарии
Первая версия этого конструктора является конструктором по умолчанию. Вторая
версия инициализирует новый экземпляра класса StringReference из объекта,
заданного параметром __fstrArg . Третья и четвертая перегрузки инициализируют
новый экземпляр класса StringReference из массива значений char16. char16
представляет 16-разрядный текстовый символ ЮНИКОДА.
См. также раздел
Класс Platform::StringReference
Класс Platform::Type
Статья • 26.09.2022
Синтаксис
C++
Platform::Object, Platform::Details::IEquatable,
Platform::Details::IPrintable
Примечания
Класс Type удобен в приложениях, где должна выполняться непосредственная
обработка с использованием оператора if или switch , образующего ветви на
основе типа объекта времени выполнения. Код типа, описывающий категорию
типа, извлекается с помощью функции-члена Type:: GetTypeCode .
Открытые методы
Имя Описание
Метод Type:: ToString Возвращает имя типа, как указано в его метаданных.
Открытые свойства
Название Описание
Requirements (Требования)
минимальный поддерживаемый клиент: Windows 8
Свойство Type::FullName
Возвращает полное имя текущего типа в форме Namespace.Type .
Синтаксис
C++
String^ FullName();
Возвращаемое значение
Имя типа.
Пример
C++
// namespace is TestApp
MainPage::MainPage()
InitializeComponent();
Type^ t = this->GetType();
Метод Type::GetTypeCode
Возвращает числовой тип категории встроенных типов.
Синтаксис
C++
Platform::TypeCode GetTypeCode();
Возвращаемое значение
Одно из значений перечисления Platform::TypeCode.
Примечания
Эквивалентом метода-члена GetTypeCode() является свойство typeid .
Синтаксис
C++
Platform::String^ ToString();
Возвращаемое значение
Имя типа, как указано в метаданных.
См. также
Пространство имен Platform
оператор Type^
Статья • 03.04.2023
Синтаксис
C++
Возвращаемое значение
Возвращает Platform::Type при получении Windows::UI::Xaml::Interop::TypeName.
Комментарии
TypeName является независимой от языка структурой среды выполнения Windows
для представления сведений о типе. Platform::Type предназначен для C++ и не
может передаваться через двоичный интерфейс приложения (ABI). Ниже
представлен один из способов использования TypeName в функции Navigate .
rootFrame->Navigate(TypeName(MainPage::typeid), e->Arguments);
Пример
В следующем примере показано преобразование из TypeName в Type и наоборот.
TypeName tn = TypeName(MainPage::typeid);
Требования
Класс Platform::Type
Перечисление Platform::TypeCode
Статья • 03.04.2023
Синтаксис
C++
Члены
Empty Void
Требования
Минимальный поддерживаемый клиент: Windows 8
Метаданные: platform.winmd
Класс значений Platform::UIntPtr
Статья • 03.04.2023
Синтаксис
C++
Требования
Минимальный поддерживаемый клиент: Windows 8
Метаданные: platform.winmd
Синтаксис
C++
Открытые методы
Имя Описание
Комментарии
Класс ValueType используется для создания типов значений. Класс ValueType
является производным от класса Object, который содержит базовые элементы.
Однако компилятор отсоединяет эти базовые элементы от типов значений,
которые являются производными от класса ValueType. При упаковке типа значения
компилятор снова присоединяет эти базовые элементы.
Требования
Минимальный поддерживаемый клиент: Windows 8
Метаданные: platform.winmd
Метод ValueType::ToString
Возвращает строковое представление объекта.
Синтаксис
C++
Platform::String ToString();
Возвращаемое значение
Объект Platform::String, представляющий значение .
Синтаксис
C++
class WeakReference
Параметры
Члены
Конструкторы
Член Описание
Методы
Член Описание
Операторы
Член Описание
Комментарии
Класс WeakReference сам не является классом ссылок и поэтому не наследуется от
Platform::Object^ и не может использоваться в сигнатуре открытого метода.
WeakReference::operator=
Присваивает значение WeakReference.
Синтаксис
C++
WeakReference& operator=(decltype(__nullptr));
Remarks
Последняя перегрузка в списке выше позволяет назначить класс ссылок
переменной WeakReference. В этом случае класс ссылки понижается к
Platform::Object^. Исходный тип восстанавливается позже, указав его в качестве
аргумента для параметра type в функции-члене WeakReference::Resolve<T> .
WeakReference::operator BoolType
Реализует безопасный шаблон bool для класса WeakReference. Не предназначен
для явного вызова в коде.
Синтаксис
C++
BoolType BoolType();
template<typename T>
T^ Resolve() const;
Параметры
Пример
C++
//use bar...
if (bar != nullptr)
WeakReference wr(bar);
Конструктор WeakReference::WeakReference
Предоставляет различные способы построения WeakReference.
Синтаксис
C++
WeakReference();
WeakReference(decltype(__nullptr));
WeakReference(WeakReference&& otherArg);
Пример
C++
WeakReference wr(mc);
Синтаксис
C++
Элементы
Открытые методы
Эти методы имеют внутреннюю доступность, то есть доступны только в
компоненте или приложении С++.
Имя Описание
Иерархия наследования
WriteOnlyArray
Требования
Параметр компилятора: /ZW
Метаданные: Platform.winmd
WriteOnlyArray::begin - метод
Возвращает указатель на первый элемент массива.
Синтаксис
C++
T* begin() const;
Возвращаемое значение
Указатель на первый элемент массива.
Комментарии
Этот итератор можно использовать с алгоритмами STL, такими как std::sort , для
выполнения действий с элементами в массиве.
Свойство WriteOnlyArray::Data
Указатель на буфер данных.
Синтаксис
C++
property T* Data{
T* get() const;
Возвращаемое значение
Указатель на необработанные байты массива.
WriteOnlyArray::end - метод
Возвращает указатель на элемент, следующий за последним элементом в массиве.
Синтаксис
C++
T* end() const;
Возвращаемое значение
Итератор указателя на элемент, следующий за последним элементом в массиве.
Комментарии
Этот итератор можно использовать с алгоритмами STL для выполнения операций,
таких как std::sort , в элементах массива.
Свойство WriteOnlyArray::FastPass
Указывает, можно ли выполнить внутреннюю оптимизацию FastPass. Не
предназначен для использования в пользовательском коде.
Синтаксис
C++
property bool FastPass{
Возвращаемое значение
Логическое значение, указывающее, является ли массив FastPass.
WriteOnlyArray::get - метод
Возвращает элемент по указанному индексу.
Синтаксис
C++
Параметры
indexArg
Используемый индекс.
Возвращаемое значение
Свойство WriteOnlyArray::Length
Возвращает число элементов в выделенном вызывающим объектом массиве.
Синтаксис
C++
Возвращаемое значение
Количество элементов в массиве.
Функция WriteOnlyArray::set
Задает указанное значение по заданному индексу массива.
Синтаксис
C++
T& set(
T valueArg);
Параметры
indexArg
valueArg
Возвращаемое значение
Ссылка на элемент, который только что был установлен.
Комментарии
Дополнительные сведения о том, как интерпретировать значение HRESULT, см. в
разделе "Структура кодов ошибок COM".
Синтаксис
C++
Remarks
Дополнительные сведения см. в описании класса COMException.
Требования
Минимальный поддерживаемый клиент: Windows 8
Метаданные: platform.winmd
Синтаксис
C++
#include <collection.h>
using namespace Platform::Collections;
Члены
Это пространство имен содержит следующие члены.
Имя Описание
Имя Описание
Иерархия наследования
Пространство имен Platform
Требования
Метаданные: platform.winmd
Синтаксис
class BackInsertIterator :
Параметры
Комментарии
Класс BackInsertIterator реализует правила, необходимые для back_insert_iterator
Class.
Члены
Открытые конструкторы
name Описание
Открытые операторы
Имя Описание
Имя Описание
Иерархия наследования
BackInsertIterator
Требования
Заголовок: collection.h
BackInsertIterator::BackInsertIterator -
конструктор
Инициализирует новый экземпляр класса BackInsertIterator .
Синтаксис
explicit BackInsertIterator(
Windows::Foundation::Collections::IVector<T>^ v);
Параметры
Объект IVector<T> .
Комментарии
BackInsertIterator вставляет элементы после последнего элемента объекта,
указанного параметром v .
BackInsertIterator::operator= - оператор
Добавляет указанный объект в конец текущей упорядоченной коллекции.
Синтаксис
Параметры
Возвращаемое значение
Ссылка на текущий объект BackInsertIterator.
BackInsertIterator::operator* - оператор
Получает ссылку на текущий объект BackInsertIterator.
Синтаксис
BackInsertIterator& operator*();
Возвращаемое значение
Ссылка на текущий объект BackInsertIterator.
Комментарии
Этот оператор возвращает ссылку на текущий BackInsertIterator, а не на любой
элемент в текущей коллекции.
BackInsertIterator::operator++ - оператор
Возвращает ссылку на текущий объект BackInsertIterator. Итератор не изменяется.
Синтаксис
BackInsertIterator& operator++();
BackInsertIterator operator++(int);
Возвращаемое значение
Ссылка на текущий объект BackInsertIterator.
Комментарии
Выражение в первом примере синтаксиса увеличивает значение текущего
элемента BackInsertIterator перед его использованием, а во втором — после его
использования. Тип int во втором примере синтаксиса задает операцию
увеличения после использования, он не является операндом целочисленного типа.
Синтаксис
class InputIterator;
Параметры
Элементы
Имя Описание
Открытые конструкторы
name Описание
Имя Описание
Иерархия наследования
InputIterator
Требования
Заголовок: collection.h
Конструктор InputIterator::InputIterator
Инициализирует новый экземпляр класса InputIterator.
Синтаксис
InputIterator();
Параметры
Итератор
Объект итератора.
Оператор InputIterator::operator->
Извлекает адрес элемента, указанного текущим итератором InputIterator.
Синтаксис
Возвращаемое значение
Адрес элемента, указанного текущим итератором InputIterator.
Оператор InputIterator::operator*
Извлекает ссылку на элемент, указанный текущим итератором InputIterator.
Синтаксис
Возвращаемое значение
Элемент, указанный текущим итератором InputIterator.
InputIterator::operator== - оператор
Указывает, равен ли текущий объект InputIterator указанному объекту InputIterator.
Синтаксис
bool operator== (const InputIterator& other) const;
Параметры
Других
Возвращаемое значение
true Значение , если текущий итератор InputIterator равен другому; в противном
случае — false .
InputIterator::operator++ - оператор
Выполняет приращение текущего итератора InputIterator.
Синтаксис
InputIterator& operator++();
InputIterator operator++(int);
Возвращаемое значение
Первый синтаксис выполняет приращение текущего итератора InputIterator и
возвращает его. Второй синтаксис возвращает копию текущего итератора
InputIterator, а затем выполняет приращение текущего итератора InputIterator.
Комментарии
Первый синтаксис InputIterator выполняет приращение текущего итератора
InputIterator перед его использованием.
InputIterator::operator!= - оператор
Указывает, отличен ли текущий объект InputIterator от указанного объекта
InputIterator.
Синтаксис
Параметры
Других
Возвращаемое значение
true Значение , если текущий итератор InputIterator не равен другому; в
Синтаксис
C++
template <
typename K,
typename V,
typename C = std::less<K>>
Параметры
K
Комментарии
Допустимые типы:
integers
класс interface^
открытый ссылочный класс ^
структура значений
Члены
Открытые конструкторы
name Описание
Открытые методы
name Описание
События
Имя Описание
Иерархия наследования
Map
Требования
Заголовок: collection.h
Метод Map::Clear
Удаляет все пары "ключ-значение" из текущего объекта Map.
Синтаксис
C++
Метод Map::First
Возвращает итератор, указывающий первый элемент в сопоставлении или nullptr ,
если сопоставление пусто.
Синтаксис
C++
virtual Windows::Foundation::Collections::IIterator<
Возвращаемое значение
Итератор, указывающий первый элемент на карте.
Комментарии
Удобный способ хранения итератора, возвращаемого first(), заключается в
присвоении возвращаемого значения переменной, объявленной с помощью
ключевого слова вычета auto типа. Например, auto x = myMap->First(); .
Метод Map::GetView
Возвращает доступное только для чтения представление текущей карты; То есть
класс Platform::Collections::MapView, реализующий интерфейс
Windows::Foundation::Collections::IMapView<K,V> .
Синтаксис
C++
Возвращаемое значение
Объект MapView .
Метод Map::HasKey
Определяет, содержит ли текущий объект Map указанный ключ.
Синтаксис
C++
Параметры
key
Возвращаемое значение
true Значение , если ключ найден; в противном случае — false .
Метод Map::Insert
Добавляет в текущий объект Map указанную пару "ключ-значение".
Синтаксис
C++
Параметры
key
value
Возвращаемое значение
true Значение , если ключ существующего элемента в текущем объекте Map
соответствует ключу , а для части значения этого элемента задано значение value.
false Значение , если нет существующего элемента в текущей карте,
совпадающего с ключом , и параметры "ключ - значение " превращаются в пару
"ключ-значение", а затем добавляются в текущую карту.
Метод Map::Lookup
Возвращает значение типа V, связанное с указанным ключом типа K, если ключ
существует.
Синтаксис
C++
V Lookup(K key);
Параметры
key
Возвращаемое значение
Значение, которое связано с ключом. Тип возвращаемого значения — typename V.
Комментарии
Если ключ не существует, создается исключение Platform::OutOfBoundsException .
Map::Map - конструктор
Инициализирует новый экземпляр класса Map.
Синтаксис
C++
explicit Map(StdMap&& m ;
Map(
InItfirst,
InItlast,
Параметры
Init
Ссылка или rvalue на объект , используемый map Class для инициализации текущей
схемы.
first
last
Событие Map::MapChanged
Возникает, когда элемент вставляется в сопоставление или удаляется из него.
Синтаксис
C++
event Windows::Foundation::Collections::MapChangedEventHandler<K,V>^
MapChanged;
Метод Map::Remove
Удаляет указанную пару "ключ-значение" из текущего объекта Map.
Синтаксис
C++
Параметры
key
Метод Map::Size
Возвращает количество элементов
Windows::Foundation::Collections::IKeyValuePair<K,V> в map.
Синтаксис
C++
Возвращаемое значение
Количество элементов в объекте Map.
Синтаксис
template <
typename K,
typename V,
typename C = ::std::less<K>>
Параметры
Комментарии
MapView — это конкретная реализация интерфейса
Windows::Foundation::Collections::IMapView <K,V> , которая передается через
двоичный интерфейс приложения (ABI). Дополнительные сведения см. в разделе
Collections (C++/CX).
Члены
Открытые конструкторы
name Описание
Открытые методы
name Описание
Иерархия наследования
MapView
Требования
Заголовок: collection.h
MapView::First - метод
Возвращает итератор, указывающий первый элемент в представлении
сопоставления.
Синтаксис
virtual Windows::Foundation::Collections::IIterator<
Возвращаемое значение
Итератор, указывающий первый элемент в представлении сопоставления.
Комментарии
Для хранения итератора, возвращаемого функцией First(), удобно присвоить
возвращаемое значение переменной, объявленной с ключевым словом вычета
auto типа. Например, auto x = myMapView->First(); .
MapView::HasKey - метод
Определяет, содержит ли текущий объект MapView указанный ключ.
Синтаксис
Параметры
key
Возвращаемое значение
true Значение , если ключ найден; в противном случае — false .
MapView::Lookup - метод
Возвращает значение типа V, связанное с указанным ключом типа K.
Синтаксис
V Lookup(K key);
Параметры
key
Ключ, используемый для поиска элемента в объекте MapView. Тип — key typename
K.
Возвращаемое значение
Значение, связанное с ключом key . Тип возвращаемого значения — typename V.
MapView::MapView - конструктор
Инициализирует новый экземпляр класса MapView.
Синтаксис
C++
InIt last,
MapView(
Параметры
Init
comp
first
last
Il
Метод MapView::Size
Возвращает количество элементов в текущем объекте MapView.
Синтаксис
C++
Возвращаемое значение
Количество элементов в текущем объекте MapView.
Метод MapView::Split
Разделяет текущий объект MapView на два объекта MapView. Этот метод не
выполняет никаких действий.
Синтаксис
C++
void Split(
Windows::Foundation::Collections::IMapView<
K, V>^ * firstPartition,
Windows::Foundation::Collections::IMapView<
K, V>^ * secondPartition);
Параметры
firstPartition
secondPartition
Комментарии
Этот метод не выполняет никаких действий.
Синтаксис
C++
template <
typename K,
typename V,
typename C = std::equal_to<K>
>
Параметры
Комментарии
Допустимые типы:
integers
класс interface^
Члены
Открытые конструкторы
name Описание
Открытые методы
name Описание
События
Имя Описание
Иерархия наследования
UnorderedMap
Требования
Заголовок: collection.h
Метод UnorderedMap::Clear
Удаляет все пары "ключ-значение" из текущего объекта UnorderedMap.
Синтаксис
C++
Метод UnorderedMap::First
Возвращает итератор, указывающий первый элемент
Windows::Foundation::Collections::IKeyValuePair<K,V> в неупорядоченной карте.
Синтаксис
C++
virtual Windows::Foundation::Collections::IIterator<
Windows::Foundation::Collections::IKeyValuePair<K, V>^>^
First();
Возвращаемое значение
Итератор, указывающий первый элемент на карте.
Комментарии
Удобный способ хранения итератора, возвращаемого first(), заключается в
присвоении возвращаемого значения переменной, объявленной с помощью
ключевого слова вычета auto типа. Например, auto x = myUnorderedMap->First(); .
Метод UnorderedMap::GetView
Возвращает доступное только для чтения представление текущего объекта
UnorderedMap; То есть класс Platform::Collections::UnorderedMapView ,
реализующий интерфейс Windows::Foundation::Collections::IMapView::IMapView .
Синтаксис
C++
Возвращаемое значение
Объект UnorderedMapView .
Метод UnorderedMap::HasKey
Определяет, содержит ли текущий объект UnorderedMap указанный ключ.
Синтаксис
C++
bool HasKey(
K key
);
Параметры
key
Возвращаемое значение
true Значение , если ключ найден; в противном случае — false .
Метод UnorderedMap::Insert
Добавляет в текущий объект UnorderedMap указанную пару "ключ-значение".
Синтаксис
C++
K key,
V value
);
Параметры
key
value
Возвращаемое значение
true Значение , если ключ существующего элемента в текущем объекте Map
соответствует ключу , а для части значения этого элемента задано значение value.
false Значение , если нет существующего элемента в текущей карте,
совпадающего с ключом , и параметры ключа и значения превращаются в пару
"ключ-значение", а затем добавляются в текущую карту UnorderedMap.
Метод UnorderedMap::Lookup
Возвращает значение типа V, связанное с указанным ключом типа K.
Синтаксис
C++
V Lookup(
K key
);
Параметры
key
Возвращаемое значение
Значение, связанное с ключом. Тип возвращаемого значения — typename V.
UnorderedMap::MapChanged
Возникает, когда элемент вставляется в сопоставление или удаляется из него.
Синтаксис
C++
event Windows::Foundation::Collections::MapChangedEventHandler<K,V>^
MapChanged;
Метод UnorderedMap::Remove
Удаляет указанную пару "ключ-значение" из текущего объекта UnorderedMap.
Синтаксис
C++
K key);
Параметры
key
Метод UnorderedMap::Size
Возвращает количество элементов
Windows::Foundation::Collections::IKeyValuePair<K,V> в UnorderedMap.
Синтаксис
C++
Возвращаемое значение
Количество элементов в объекте UnorderedMap.
Конструктор UnorderedMap::UnorderedMap
Инициализирует новый экземпляр класса UnorderedMap.
Синтаксис
C++
UnorderedMap();
explicit UnorderedMap(
size_t n
);
UnorderedMap(
size_t n,
const H& h
);
UnorderedMap(
size_t n,
const H& h,
const P& p
);
explicit UnorderedMap(
);
explicit UnorderedMap(
std::unordered_map<K, V, H, P>&& m
);
UnorderedMap(
InIt first,
InIt last
);
UnorderedMap(
InIt first,
InIt last,
size_t n
);
UnorderedMap(
InIt first,
InIt last,
size_t n,
const H& h
);
UnorderedMap(
InIt first,
InIt last,
size_t n,
const H& h,
const P& p
);
UnorderedMap(
);
UnorderedMap(
size_t n
);
UnorderedMap(
size_t n,
const H& h
);
UnorderedMap(
size_t n,
const H& h,
const P& p
);
Параметры
Init
first
last
Класс Platform::Collections::Map
Класс Platform::Collections::UnorderedMapView
Коллекции
Синтаксис
C++
template <
typename K,
typename V,
typename C = ::std::equal_to<K>>
Параметры
K
Комментарии
UnorderedMapView — это конкретная реализация интерфейса
Windows::Foundation::Collections::IMapView<K,V> , который передается через
двоичный интерфейс приложения (ABI). Дополнительные сведения см. в разделе
Collections (C++/CX).
Члены
Открытые конструкторы
name Описание
Открытые методы
name Описание
Иерархия наследования
UnorderedMapView
Требования
Заголовок: collection.h
Метод UnorderedMapView::First
Возвращает итератор, указывающий первый элемент
Windows::Foundation::Collections::IKeyValuePair<K,V> в неупорядоченной карте.
Синтаксис
C++
virtual Windows::Foundation::Collections::IIterator<
Windows::Foundation::Collections::IKeyValuePair<K, V>^>^
First();
Возвращаемое значение
Итератор, указывающий первый элемент в представлении сопоставления.
Комментарии
Для хранения итератора, возвращаемого функцией First(), удобно присвоить
возвращаемое значение переменной, объявленной с ключевым словом вычета
auto типа. Например, auto x = myMapView->First(); .
Метод UnorderedMapView::HasKey
Определяет, содержит ли текущий объект UnorderedMap указанный ключ.
Синтаксис
C++
Параметры
key
Возвращаемое значение
true Значение , если ключ найден; в противном случае — false .
Метод UnorderedMapView::Lookup
Возвращает значение типа V, связанное с указанным ключом типа K.
Синтаксис
C++
V Lookup(K key);
Параметры
key
Возвращаемое значение
Значение, связанное с ключом key . Тип возвращаемого значения — typename V.
Метод UnorderedMapView::Size
Возвращает количество элементов
Windows::Foundation::Collections::IKeyValuePair<K,V> в UnorderedMapView.
Синтаксис
C++
Возвращаемое значение
Количество элементов в Unordered MapView.
Метод UnorderedMapView::Split
Разделяет текущий объект UnorderedMapView на два объекта UnorderedMapView.
Этот метод не выполняет никаких действий.
Синтаксис
C++
void Split(
Windows::Foundation::Collections::IMapView<
K,V>^ * firstPartition,
Windows::Foundation::Collections::IMapView<
K,V>^ * secondPartition);
Параметры
firstPartition
secondPartition
Комментарии
Этот метод не выполняет никаких действий.
Конструктор
UnorderedMapView::UnorderedMapView
Инициализирует новый экземпляр класса UnorderedMapView.
Синтаксис
C++
UnorderedMapView();
explicit UnorderedMapView(
explicit UnorderedMapView(
InIt first,
InIt last,
size_t n,
const H& h );
InIt first,
InIt last,
size_t n,
const H& h,
const P& p );
UnorderedMapView(std::initializer_list<std::pair<const K, V>);
UnorderedMapView(
size_t n,
UnorderedMapView(
size_t n,
const H& h,
const P& p );
Параметры
n
Init
first
Windows::Foundation::IMapView
Класс Platform::Collections::Vector
Статья • 03.04.2023
Синтаксис
Параметры
T
Комментарии
Допустимые типы:
1. integers
2. класс интерфейса^
4. структура значений
Члены
Открытые конструкторы
name Описание
Открытые методы
name Описание
События
Имя Описание
Иерархия наследования
Vector
Требования
Заголовок: collection.h
Метод Vector::Append
Вставляет указанный элемент после последнего элемента текущего объекта Vector.
Синтаксис
C++
Параметры
index
Синтаксис
C++
Vector::First - метод
Возвращает итератор, указывающий первый элемент объекта Vector.
Синтаксис
C++
Возвращаемое значение
Итератор, указывающий первый элемент объекта Vector.
Комментарии
Для хранения итератора, возвращаемого функцией First(), удобно присвоить
возвращаемое значение переменной, объявленной с ключевым словом вычета
auto типа. Например, auto x = myVector->First(); . Этому итератору известна длина
коллекции.
Vector::GetAt - метод
Извлекает элемент текущего объекта Vector, указанный заданным индексом.
Синтаксис
C++
Параметры
index
Возвращаемое значение
Элемент, заданный параметром index . Тип элемента определяется именем типа T .
Vector::GetMany - метод
Извлекает последовательность элементов из текущего объекта Vector, начиная с
определенного индекса, и копирует их в выделенный вызывающим объектом
массив.
Синтаксис
C++
Platform::WriteOnlyArray<T>^ dest);
Параметры
startIndex
Dest
Комментарии
Эта функция не предназначена для прямого использования в клиентском коде. Он
используется внутри функции to_vector для обеспечения эффективного
преобразования экземпляров Platform::Vector в экземпляры std::vector.
Vector::GetView - метод
Возвращает доступное только для чтения представление объекта Vector, то есть
интерфейс IVectorView.
Синтаксис
C++
Windows::Foundation::Collections::IVectorView<T>^ GetView();
Возвращаемое значение
Объект IVectorView.
Vector::IndexOf - метод
Выполняет поиск указанного элемента в текущем объекте Vector и возвращает его
индекс, если он найден.
Синтаксис
C++
Параметры
value
index
Параметр index имеет значение 0, если элемент является первым элементом Vector
или элемент не найден. Если возвращаемое значение равно true , элемент был
найден и является первым элементом; в противном случае элемент не найден.
Возвращаемое значение
true Значение , если указанный элемент найден; в противном случае — false .
Комментарии
IndexOf использует std::find_if для поиска элемента. Таким образом, типы
настраиваемых элементов должны перегрузить оператор == и != для включения
сравнений на равенство, которое требуется для find_if.
Метод Vector::InsertAt
Вставляет указанный элемент в текущий vector в элементе, определяемом
заданным индексом.
Синтаксис
C++
Параметры
index
Item
Метод Vector::RemoveAt
Удаляет элемент, определенный заданным индексом из текущего объекта Vector.
Синтаксис
C++
Параметры
index
Метод Vector::RemoveAtEnd
Удаляет элемент в конце текущего объекта Vector.
Синтаксис
C++
Метод Vector::ReplaceAll
Удаляет элементы из текущего объекта Vector, а затем вставляет элементы из
указанного массива.
Синтаксис
C++
Параметры
Arr
Метод Vector::SetAt
Присваивает указанное значение к элементу текущего объекта Vector,
определяемому заданным индексом.
Синтаксис
C++
Параметры
index
Item
Метод Vector::Size
Возвращает количество элементов в текущем объекте Vector.
Синтаксис
C++
Возвращаемое значение
Количество элементов в текущем объекте Vector.
Vector::Vector - конструктор
Инициализирует новый экземпляр класса Vector.
Синтаксис
C++
Vector();
Vector(std::initializer_list<T> il);
Параметры
a
Arr
Init
Il
size
Ptr
first
last
Синтаксис
class VectorIterator;
Параметры
T
Элементы
Имя Описание
Открытые конструкторы
name Описание
Открытые операторы
Имя Описание
Иерархия наследования
VectorIterator
Требования
Заголовок: collection.h
Оператор VectorIterator::operator->
Извлекает адрес элемента, на который ссылается текущий итератор VectorIterator.
Синтаксис
Возвращаемое значение
Значение элемента, на который ссылается текущий итератор VectorIterator.
Синтаксис
VectorIterator& operator--();
VectorIterator operator--(int);
Возвращаемое значение
Первый синтаксис выполняет уменьшение текущего итератора VectorIterator и
возвращает его. Второй синтаксис возвращает копию текущего итератора
VectorIterator, а затем выполняет уменьшение текущего итератора VectorIterator.
Комментарии
Первый синтаксис выполняет уменьшение текущего итератора VectorIterator перед
его использованием.
Оператор VectorIterator::operator*
Извлекает адрес элемента, указанного текущим итератором VectorIterator.
Синтаксис
Возвращаемое значение
Элемент, указанный текущим итератором VectorIterator.
Оператор VectorIterator::operator==
Указывает, равен ли текущий объект VectorIterator указанному объекту
VectorIterator.
Синтаксис
Параметры
Других
Возвращаемое значение
true Значение , если текущий VectorIterator равен другому; в противном случае —
false .
Оператор VectorIterator::operator>
Указывает, действительно ли текущий объект VectorIterator больше, чем указанный
объект VectorIterator.
Синтаксис
C++
Параметры
Других
Оператор VectorIterator::operator>=
Указывает, является ли текущий объект VectorIterator большим или равным
указанному объекту VectorIterator.
Синтаксис
C++
Параметры
Других
Возвращаемое значение
true Значение , если текущий VectorIterator больше или равен другому; в
Оператор VectorIterator::operator++
Выполняет увеличение текущего итератора VectorIterator.
Синтаксис
VectorIterator& operator++();
VectorIterator operator++(int);
Возвращаемое значение
Первый синтаксис выполняет увеличение текущего итератора VectorIterator и
возвращает его. Второй синтаксис возвращает копию текущего итератора
VectorIterator, а затем выполняет увеличение текущего итератора VectorIterator.
Комментарии
Первый синтаксис выполняет увеличение текущего итератора VectorIterator перед
его использованием.
Оператор VectorIterator::operator!=
Указывает, отличен ли текущий объект VectorIterator от указанного объекта
VectorIterator.
Синтаксис
Параметры
Других
Возвращаемое значение
true Значение , если текущий VectorIterator не равен другому; в противном случае
— false .
Оператор VectorIterator::operator<
Указывает, является ли текущий объект VectorIterator меньшим, чем указанный
объект VectorIterator.
Синтаксис
C++
Параметры
Других
Возвращаемое значение
true Значение , если текущий VectorIterator меньше других; в противном случае —
false .
Оператор VectorIterator::operator<=
Указывает, является ли текущий объект VectorIterator меньшим или равным
указанному объекту VectorIterator.
Синтаксис
C++
Параметры
Других
Возвращаемое значение
true Значение , если текущий VectorIterator меньше или равен другому; в
противном случае — false .
VectorIterator::operator- - оператор
Вычитает указанное количество элементов из текущего итератора, возвращая
новый итератор, или вычитает указанный итератор из текущего итератора,
возвращая количество элементов между итераторами.
Синтаксис
Параметры
n
Количество элементов.
Других
Возвращаемое значение
Синтаксис первого оператора возвращает объект VectorIterator, количество
элементов которого меньше, чем у текущего объекта VectorIterator, на n . Синтаксис
второго оператора возвращает количество элементов между текущим объектом
VectorIterator и другим объектом VectorIterator, заданным параметром other .
VectorIterator::operator+= - оператор
Увеличивает текущий итератор VectorIterator на указанную величину смещения.
Синтаксис
Параметры
n
Возвращаемое значение
Обновленный VectorIterator.
VectorIterator::operator+ - оператор
Возвращает объект VectorIterator, указывающий на элемент с заданным смещением
от указанного объекта VectorIterator.
Синтаксис
ptrdiff_t n,
Параметры
T
Возвращаемое значение
В первом синтаксисе — объект VectorIterator, указывающий на элемент с заданным
смещением от текущего объекта VectorIterator.
VectorIterator::operator-= - оператор
Уменьшает текущий итератор VectorIterator на указанную величину смещения.
Синтаксис
Параметры
n
Возвращаемое значение
Обновленный VectorIterator.
VectorIterator::operator[]
Извлекает ссылку на элемент, отстоящий от текущего итератора VectorIterator на
указанную величину смещения.
Синтаксис
Параметры
n
VectorIterator::VectorIterator - конструктор
Инициализирует новый экземпляр класса VectorIterator.
Синтаксис
VectorIterator();
explicit VectorIterator(
Windows::Foundation::Collections::IVector<T>^ v);
Параметры
V
Объект IVector<T> .
Комментарии
Первый пример синтаксиса является конструктором по умолчанию. Второй пример
синтаксиса — это явный конструктор, который используется для создания
VectorIterator из объекта IVector<T> .
Синтаксис
Параметры
T
Примечания
Класс VectorView реализует интерфейс
Windows::Foundation::Collections::IVectorView<T> и поддерживает итераторы
стандартной библиотеки шаблонов.
Члены
Открытые конструкторы
name Описание
Открытые методы
name Описание
Иерархия наследования
VectorView
Требования
Заголовок: collection.h
VectorView::First - метод
Возвращает итератор, указывающий первый элемент объекта VectorView.
Синтаксис
virtual Windows::Foundation::Collections::IIterator<T>^
First();
Возвращаемое значение
Итератор, указывающий первый элемент объекта VectorView.
Комментарии
Удобный способ хранения итератора, возвращаемого first(), заключается в
присвоении возвращаемого значения переменной, объявленной с помощью
ключевого слова вычета auto типа. Например, auto x = myVectorView->First(); .
VectorView::GetAt - метод
Извлекает элемент текущего VectorView, указанный заданным индексом.
Синтаксис
T GetAt(
UInt32 index
);
Параметры
index
Возвращаемое значение
Элемент, заданный параметром index . Тип элемента задается параметром шаблона
VectorView T.
VectorView::GetMany - метод
Извлекает последовательность элементов из текущего объекта VectorView, начиная
с указанного индекса.
Синтаксис
::Platform::WriteOnlyArray<T>^ dest
);
Параметры
startIndex
Dest
Возвращаемое значение
Количество извлеченных элементов.
VectorView::IndexOf - метод
Выполняет поиск указанного элемента в текущем объекте VectorView и возвращает
его индекс, если он найден.
Синтаксис
T value,
);
Параметры
value
index
Метод VectorView::Size
Возвращает количество элементов в текущем объекте VectorView.
Синтаксис
Возвращаемое значение
Количество элементов в текущем объекте VectorView.
VectorView::VectorView - конструктор
Инициализирует новый экземпляр класса VectorView.
Синтаксис
VectorView();
explicit VectorView(
UInt32 size
);
VectorView(
UInt32 size,
T value
);
explicit VectorView(
const ::std::vector<T>& v
);
explicit VectorView(
::std::vector<T>&& v
);
VectorView(
const T * ptr,
UInt32 size
);
template <
size_t N
>
explicit VectorView(
const T (&arr)[N]
);
template <
size_t N
>
explicit VectorView(
const ::std::array<T,
N>& a
);
explicit VectorView(
);
template <
typename InIt
>
VectorView(
InItfirst,
InItlast
);
VectorView(
std::initializer_list<T> il
);
Параметры
Init
Il
size
Ptr
Arr
first
last
Синтаксис
class VectorViewIterator;
Параметры
T
Элементы
Имя Описание
Открытые конструкторы
name Описание
Открытые операторы
Имя Описание
Иерархия наследования
VectorViewIterator
Требования
Заголовок: collection.h
Оператор VectorViewIterator::operator->
Извлекает адрес элемента, на который ссылается текущий итератор
VectorViewIterator.
Синтаксис
Возвращаемое значение
Значение элемента, на который ссылается текущий итератор VectorViewIterator.
Оператор VectorViewIterator::operator--
Выполняет уменьшение текущего итератора VectorViewIterator.
Синтаксис
VectorViewIterator& operator--();
VectorViewIterator operator--(int);
Возвращаемое значение
Первый синтаксис выполняет уменьшение текущего итератора VectorViewIterator и
возвращает его. Второй синтаксис возвращает копию текущего итератора
VectorViewIterator, а затем выполняет уменьшение текущего итератора
VectorViewIterator.
Комментарии
Первый синтаксис выполняет уменьшение текущего итератора VectorViewIterator
перед его использованием.
VectorViewIterator::operator* - оператор
Извлекает ссылку на элемент, указанный текущим итератором VectorViewIterator.
Синтаксис
reference operator*() const;
Возвращаемое значение
Элемент, указанный текущим итератором VectorIterator.
VectorViewIterator::operator== - оператор
Указывает, равен ли текущий объект VectorViewIterator указанному объекту
VectorViewIterator.
Синтаксис
Параметры
Других
Возвращаемое значение
true Значение , если текущий VectorViewIterator объект равен другому; в
Оператор VectorViewIterator::operator>
Указывает, действительно ли текущий объект VectorViewIterator больше, чем
указанный объект VectorViewIterator.
Синтаксис
Параметры
Других
Возвращаемое значение
true Значение , если текущий VectorViewIterator больше других; в противном
случае — false .
Оператор VectorViewIterator::operator>=
Указывает, является ли текущий VectorViewIterator объект больше или равен
указанному VectorViewIterator .
Синтаксис
Параметры
Других
Возвращаемое значение
true Значение , если текущий VectorViewIterator объект больше или равен
VectorViewIterator::operator++ - оператор
Выполняет приращение текущего итератора VectorViewIterator.
Синтаксис
VectorViewIterator& operator++();
VectorViewIterator operator++(int);
Возвращаемое значение
Первый синтаксис выполняет приращение текущего итератора VectorViewIterator и
возвращает его. Второй синтаксис возвращает копию текущего итератора
VectorViewIterator, а затем выполняет приращение текущего итератора
VectorViewIterator.
Комментарии
Первый синтаксис выполняет приращение текущего итератора VectorViewIterator
перед его использованием.
VectorViewIterator::operator!= - оператор
Указывает, отличен ли текущий объект VectorViewIterator от указанного объекта
VectorViewIterator.
Синтаксис
Параметры
Других
Возвращаемое значение
true Значение , если текущий VectorViewIterator объект не равен другим; в
Оператор VectorViewIterator::operator<
Указывает, является ли текущий объект VectorIterator меньшим, чем указанный
объект VectorIterator.
Синтаксис
Параметры
Других
Возвращаемое значение
true Значение , если текущий VectorIterator объект меньше другого; в противном
Оператор VectorViewIterator::operator<=
Указывает, является ли текущий VectorIterator объект меньше или равен
указанному VectorIterator объекту .
Синтаксис
Параметры
Других
Возвращаемое значение
true Значение , если текущий VectorIterator объект меньше или равен другому; в
VectorViewIterator::operator- - оператор
Вычитает указанное количество элементов из текущего итератора, возвращая
новый итератор, или вычитает указанный итератор из текущего итератора,
возвращая количество элементов между итераторами.
Синтаксис
Параметры
n
Количество элементов.
Других
Возвращаемое значение
Синтаксис первого оператора возвращает объект VectorViewIterator, количество
элементов которого меньше, чем у текущего объекта VectorViewIterator, на n .
Синтаксис второго оператора возвращает количество элементов между текущим
объектом VectorViewIterator и другим объектом VectorViewIterator, заданным
параметром other .
VectorViewIterator::operator+= - оператор
Увеличивает текущий итератор VectorViewIterator на указанную величину
смещения.
Синтаксис
Параметры
n
Возвращаемое значение
Обновленный VectorViewIterator.
VectorViewIterator::operator+ - оператор
Возвращает объект VectorViewIterator, указывающий на элемент с заданным
смещением от указанного объекта VectorViewIterator.
Синтаксис
(ptrdiff_t n,
Параметры
T
Возвращаемое значение
В первом синтаксисе — объект VectorViewIterator, указывающий на элемент с
заданным смещением от текущего объекта VectorViewIterator.
VectorViewIterator::operator-= - оператор
Уменьшает текущий итератор VectorIterator на указанную величину смещения.
Синтаксис
Параметры
n
Возвращаемое значение
Обновленный VectorIterator.
VectorViewIterator::operator[]
Извлекает ссылку на элемент, удаленный от текущего итератора VectorViewIterator
на указанную величину смещения.
Синтаксис
Параметры
n
Возвращаемое значение
Элемент, удаленный от текущего итератора VectorViewIterator на n .
VectorViewIterator::VectorViewIterator -
конструктор
Инициализирует новый экземпляр класса VectorViewIterator.
Синтаксис
VectorViewIterator();
explicit VectorViewIterator(
Windows::Foundation::Collections::IVectorView<T>^ v
);
Параметры
V
Объект T IVectorView<>.
Комментарии
Первый пример синтаксиса является конструктором по умолчанию. Второй пример
синтаксиса — это явный конструктор, который используется для создания
VectorViewIterator из объекта IVectorView<T> .
Синтаксис
C++
Члены
Члены этого пространства имен определены в файле collection.h и не
отображаются в обозревателе объектов.
Иерархия наследования
Пространство имен Platform::Collections
Требования
Заголовка: Collection.h
Синтаксис
C++
namespace Platform {
namespace Details {
}}
Члены
Хотя это пространство имен предназначено для внутреннего использования,
следующие его члены могут отображаться в браузерах.
Имя Комментарий
_GUID Структура
Куча Класс
HeapAllocationTrackingLevel Перечисление
HeapEntryHandler Делегат
IActivationFactory Интерфейс
IAgileObject Интерфейс
IClassFactory Интерфейс
IEquatable Интерфейс
IPrintable Интерфейс
IWeakReference Интерфейс
IWeakReferenceSource Интерфейс
Иерархия наследования
Platform
Требования
Метаданные: platform.winmd
Синтаксис
C++
Remarks
Эта структура предоставляется исключительно для полноты информации,
поскольку ее данные можно изучить с помощью браузеров.
Иерархия наследования
Platform
Требования
Метаданные: platform.winmd
Синтаксис
C++
Remarks
Этот класс предоставляется исключительно для полноты информации, поскольку
его данные можно изучить с помощью браузеров.
Иерархия наследования
Platform
Требования
Метаданные: platform.winmd
Синтаксис
C++
Remarks
Этот класс предоставляется исключительно для полноты информации, поскольку
его данные можно изучить с помощью браузеров.
Иерархия наследования
Platform
Требования
Метаданные: platform.winmd
Синтаксис
C++
Remarks
Это перечисление предоставляется исключительно для полноты информации,
поскольку его данные можно изучить с помощью браузеров.
Иерархия наследования
Platform
Требования
Метаданные: platform.winmd
Синтаксис
C++
delegate HeapEntryHandler;
Remarks
Этот класс предоставляется исключительно для полноты информации, поскольку
его данные можно изучить с помощью браузеров.
Иерархия наследования
Platform
Требования
Метаданные: platform.winmd
Синтаксис
C++
Remarks
Этот интерфейс предоставляется исключительно для полноты информации,
поскольку его данные можно изучить с помощью браузеров.
Иерархия наследования
Platform
Требования
Метаданные: platform.winmd
Синтаксис
C++
Remarks
Этот интерфейс предоставляется исключительно для полноты информации,
поскольку его данные можно изучить с помощью браузеров.
Иерархия наследования
Platform
Требования
Метаданные: platform.winmd
Синтаксис
C++
namespace Platform {
namespace Metadata {
}}
Члены
Хотя это пространство имен предназначено для внутреннего использования,
следующие его члены могут отображаться в браузерах.
Имя Комментарий
Иерархия наследования
Platform
Требования
Метаданные: platform.winmd
Синтаксис
C++
Наследование
Platform::Object
Platform::Metadata::Attribute
Требования
Минимальный поддерживаемый клиент: Windows 8
Метаданные: platform.winmd
Синтаксис
C++
Наследование
Platform::Object
Platform::Metadata::Attribute
Комментарии
Применяет атрибут DefaultMember к методу, который используется приложением
JavaScript.
Требования
Минимальный поддерживаемый клиент: Windows 8
Метаданные: platform.winmd
Указывает, что перечисление может обрабатываться как битовое поле (т. е. набор
флагов).
Синтаксис
C++
Наследование
Platform::Object
Platform::Metadata::Attribute
Remarks
Требования
Минимальный поддерживаемый клиент: Windows 8
Метаданные: platform.winmd
Синтаксис
C++
[Platform::Metadata::RuntimeClassName] name
Параметры
name
Комментарии
Этот атрибут используется в закрытых классах ссылок для указания имени
пользовательского типа среды выполнения. Задает в качестве имени открытый
интерфейс, реализуемый классом.
Пример
В следующем примере показано использование атрибута. В этом примере имя
типа среды выполнения HellowWorldImpl является интерфейсом
Test::Native::MyComponent::IHelloWorld.
C++
namespace Test
namespace Native
namespace MyComponent
Platform::String^ SayHello();
};
public:
HelloWorldImpl();
virtual Platform::String^ SayHello();
};
Platform::String^ HelloWorldImpl::SayHello()
Синтаксис
C++
namespace Platform {
namespace CompilerServices{
}}
Члены
Хотя это пространство имен предназначено для внутреннего использования,
следующие его члены могут отображаться в браузерах.
Имя Комментарий
CallConvCdecl
CallConvFastcall
CallConvStdcall
CallConvThiscall
IndexerNameAttribute
IsBoxed
IsByValue
IsConst
IsCopyConstructed
IsExplicitlyDereferenced
IsImplicitlyDereferenced
IsLong
Имя Комментарий
IsSignUnspecifiedByte
IsSigned
IsUdtReturn
IsVolatile
OnePhaseConstructedAttribute
Иерархия наследования
Platform
Требования
Метаданные: platform.winmd
Синтаксис
C++
namespace Platform {
namespace InteropServices {
}}
Члены
Хотя это пространство имен предназначено для внутреннего использования,
следующие его члены могут отображаться в браузерах.
Имя Комментарий
ComInterfaceType перечисление
InterfaceTypeAttribute
LayoutKind перечисление
MarshalAsAttribute
StuctLayoutAttribute
UnmanagedType перечисление
Иерархия наследования
Platform
Требования
Метаданные: platform.winmd
Пространство имен: Platform::InteropServices
Синтаксис
namespace Windows {
namespace Foundation {
namespace Collections;
Функции
Имя Описание
Требования
Заголовок: collection.h
Синтаксис
Platform::BackInsertIterator<T>
back_inserter(IVector<T>^ v);
template<typename T>
Platform::BackInsertIterator<T>
back_inserter(IObservableVector<T>^ v);
Параметры
Возвращаемое значение
Итератор.
Требования
Заголовок: collection.h
Синтаксис
C++
::Platform::Collections::VectorIterator<T>
begin(IVector<T>^ v);
::Platform::Collections::VectorViewIterator<T>
begin(IVectorView<T>^ v);
::Platform::Collections::InputIterator<T>
begin(IIterable<T>^ i);
Параметры
T
Возвращаемое значение
Итератор, который указывает на начало коллекции.
Комментарии
Первые два шаблона функций возвращают итераторы, а третий шаблон функции
возвращает входной итератор.
Требования
Заголовок: collection.h
Синтаксис
C++
::Platform::Collections::VectorIterator<T>
end(IVector<T>^ v);
::Platform::Collections::VectorViewIterator<T>
end(IVectorView<T>^ v);
::Platform::Collections::InputIterator<T>
end(IIterable<T>^ i);
Параметры
T
Возвращаемое значение
Итератор, который указывает на позицию после конечного элемента коллекции.
Комментарии
Первые два шаблона функций возвращают итераторы, а третий шаблон функции
возвращает входной итератор.
Требования
Заголовок: collection.h
Синтаксис
Параметры
Возвращаемое значение
Требования
Заголовок: collection.h
Синтаксис
C++
Возвращаемое значение
Возвращает значение Windows::UI::Xaml::Interop::TypeName при получении
Platform::Type^ .
Комментарии
TypeName является независимой от языка структурой среды выполнения Windows
C++
rootFrame->Navigate(TypeName(MainPage::typeid), e->Arguments);
Пример
В следующем примере показано преобразование из TypeName в Type и наоборот.
C++
Windows::UI::Xaml::Interop::TypeName tn = TypeName(MainPage::typeid);
Требования
Класс Platform::Type
Функции CRT, которые не поддерживаются в приложениях
универсальной платформы Windows
Статья • 03.04.2023
Многие функции среды выполнения C (CRT) недоступны при создании приложений универсальная платформа Windows (UWP).
Иногда доступны обходные пути— например, можно использовать API среда выполнения Windows или Win32. В других случаях
функции CRT были запрещены, так как соответствующие функции или вспомогательные API не применяются к приложениям UWP.
Чтобы найти альтернативный метод, поддерживаемый для среда выполнения Windows, см. статью Альтернатива API Windows в
приложениях UWP.
В следующей таблице перечислены функции CRT, недоступные при создании приложений UWP. Он указывает на все применимые
обходные пути.
_cgets _cgets_s _cgetws _cgetws_s _cprintf _cprintf_l _cprintf_p _cprintf_p_l _cprintf_s Эти консольные Консольные
_cprintf_s_l _cputs _cputws _cscanf _cscanf_l _cscanf_s _cscanf_s_l _cwait _cwprintf _cwprintf_l функции ввода- приложения UWP
_cwprintf_p _cwprintf_p_l _cwprintf_s _cwprintf_s_l _cwscanf _cwscanf_l _cwscanf_s _cwscanf_s_l вывода недоступны могут использовать
_vcprintf _vcprintf_l _vcprintf_p _vcprintf_p_l _vcprintf_s _vcprintf_s_l _vcwprintf _vcwprintf_l в приложениях UWP эти функции.
_vcwprintf_p _vcwprintf_p_l _vcwprintf_s _vcwprintf_s_l _getch _getch_nolock _getche на основе Дополнительные
_getche_nolock _getwch _getwch_nolock _getwche _getwche_nolock _putch _putch_nolock _putwch графического сведения см. в
_putwch_nolock _ungetch _ungetch_nolock _ungetwch _ungetwch_nolock _kbhit kbhit putch cgets пользовательского статье Создание
cprintf cputs cscanf cwait getch getche ungetch
интерфейса. консольного
приложения
универсальная
платформа
Windows.
_inp _inpd _inpw _outp _outpd _outpw inp inpd inpw outp outpd outpw Ввод-вывод через Обходное решение
порты не отсутствует.
поддерживается в
приложениях UWP.
Функция Описание Обходной путь
_ismbcalnum _ismbcalnum_l _ismbcalpha _ismbcalpha_l _ismbcdigit _ismbcdigit_l _ismbcgraph Многобайтовые Используйте вместо
_ismbcgraph_l _ismbchira _ismbchira_l _ismbckata _ismbckata_l _ismbcl0 _ismbcl0_l _ismbcl1 строки не них строки
_ismbcl1_l _ismbcl2 _ismbcl2_l _ismbclegal _ismbclegal_l _ismbclower _ismbclower_l _ismbcprint поддерживаются в Юникода.
_ismbcprint_l _ismbcpunct _ismbcpunct_l _ismbcspace _ismbcspace_l _ismbcsymbol _ismbcsymbol_l приложениях UWP.
_ismbcupper _ismbcupper_l _mbbtombc _mbbtombc_l _mbbtype _mbbtype_l _mbccpy _mbccpy_l _mbccpy_s
_mbccpy_s_l _mbcjistojms _mbcjistojms_l _mbcjmstojis _mbcjmstojis_l _mbclen _mbclen_l _mbctohira
_mbctohira_l _mbctokata _mbctokata_l _mbctolower _mbctolower_l _mbctombb _mbctombb_l _mbctoupper
_mbctoupper_l _mbsbtype _mbsbtype_l _mbscat _mbscat_l _mbscat_s _mbscat_s_l _mbschr _mbschr_l
_mbscmp _mbscmp_l _mbscoll _mbscoll_l _mbscpy _mbscpy_l _mbscpy_s _mbscpy_s_l _mbscspn _mbscspn_l
_mbsdec _mbsdec_l _mbsicmp _mbsicmp_l _mbsicoll _mbsicoll_l _mbsinc _mbsinc_l _mbslen _mbslen_l
_mbslwr _mbslwr_l _mbslwr_s _mbslwr_s_l _mbsnbcat _mbsnbcat_l _mbsnbcat_s _mbsnbcat_s_l _mbsnbcmp
_mbsnbcmp_l _mbsnbcnt _mbsnbcnt_l _mbsnbcoll _mbsnbcoll_l _mbsnbcpy _mbsnbcpy_l _mbsnbcpy_s
_mbsnbcpy_s_l _mbsnbicmp _mbsnbicmp_l _mbsnbicoll _mbsnbicoll_l _mbsnbset _mbsnbset_l _mbsnbset_s
_mbsnbset_s_l _mbsncat _mbsncat_l _mbsncat_s _mbsncat_s_l _mbsnccnt _mbsnccnt_l _mbsncmp
_mbsncmp_l _mbsncoll _mbsncoll_l _mbsncpy _mbsncpy_l _mbsncpy_s _mbsncpy_s_l _mbsnextc _mbsnextc_l
_mbsnicmp _mbsnicmp_l _mbsnicoll _mbsnicoll_l _mbsninc _mbsninc_l _mbsnlen _mbsnlen_l _mbsnset
_mbsnset_l _mbsnset_s _mbsnset_s_l _mbspbrk _mbspbrk_l _mbsrchr _mbsrchr_l _mbsrev _mbsrev_l
_mbsset _mbsset_l _mbsset_s _mbsset_s_l _mbsspn _mbsspn_l _mbsspnp _mbsspnp_l _mbsstr _mbsstr_l
_mbstok _mbstok_l _mbstok_s _mbstok_s_l _mbsupr _mbsupr_l _mbsupr_s _mbsupr_s_l is_wctype
_environ _putenv _putenv_s _searchenv _searchenv_s _dupenv_s _wputenv _wputenv_s _wsearchenv getenv Переменные среды Обходное решение
getenv_s putenv _wdupenv_s _wenviron _wgetenv _wgetenv_s _wsearchenv_s tzset недоступны для отсутствует. Чтобы
приложений UWP. задать часовой
пояс, используйте
. _tzset
_wexecl _wexecle _wexeclp _wexeclpe _wexecv _wexecve _wexecvp _wexecvpe _execl _execle _execlp Эта Обходное решение
_execlpe _execv _execve _execvp _execvpe _spawnl _spawnle _spawnlp _spawnlpe _spawnv _spawnve функциональность отсутствует.
_spawnvp _spawnvpe _wspawnl _wspawnle _wspawnlp _wspawnlpe _wspawnv _wspawnve _wspawnvp _wspawnvpe недоступна для
_wsystem execl execle execlp execlpe execv execve execvp execvpe spawnl spawnle spawnlp spawnlpe приложений UWP.
spawnv spawnve spawnvp spawnvpe system Приложение UWP
не может вызывать
другое приложение
UWP или
классическое
приложение.
Функция Описание Обходной путь
В CRT для приложений UWP доступны следующие функции. Однако используйте их только в том случае, если вы не можете
использовать соответствующие API Win32 или среда выполнения Windows, например при переносе больших баз кода:
Однобайтовые строковые Сделайте приложения UWP строго юникодом, так как все API Win32 и API среда выполнения Windows, которые
функции, например strcat , предоставляются, используют только наборы символов Юникода. Однобайтовые функции были оставлены для
strcpy , strlwr и так далее. переноса больших баз кода, но в противном случае их следует избегать. По возможности следует использовать
соответствующие расширенные функции char.
Функции ввода-вывода Эти функции являются синхронными, что не рекомендуется для приложений UWP. В приложениях UWP для
потоков и ввода-вывода открытия, чтения и записи файлов используйте асинхронные API, чтобы избежать блокировки потока
файлов нижнего уровня, пользовательского интерфейса. Примеры таких API можно найти в классе Windows::Storage::FileIO .
например fopen , open и так
далее.
Функции
_tzset
Функции
_get_heap_handle , _heapmin
Библиотека шаблонов C++ среды
выполнения Windows (WRL)
Статья • 03.04.2023
7 Примечание
Преимущества
Библиотека шаблонов C++ среда выполнения Windows позволяет упростить
реализацию и использование компонентов com-модели. Он предоставляет методы
обслуживания, такие как подсчет ссылок для управления временем существования
объектов и тестирования значений HRESULT, чтобы определить, успешно ли
выполнена операция или сбой. Чтобы успешно использовать библиотеку
шаблонов среда выполнения Windows C++, необходимо тщательно следовать этим
правилам и методам.
7 Примечание
Приступая к работе
Ниже приведены некоторые ресурсы, которые помогут вам сразу приступить к
работе с библиотекой шаблонов среда выполнения Windows C++.
Практическое руководство. Активация и использование компонента среды
выполнения Windows
aggregation
стандартные реализации
точки подключения
перемещаемые интерфейсы
внедрение OLE
COM+
Основные понятия
среда выполнения Windows библиотека шаблонов C++ предоставляет типы,
представляющие несколько основных понятий. Эти типы описаны в следующих
разделах.
ComPtr
типComPtr — тип интеллектуального указателя , который представляет
интерфейс, определяемый параметром шаблона. Тип ComPtr используется для
объявления переменной, которая может получить доступ к членам объекта,
производного от интерфейса. ComPtr автоматически поддерживает счетчик ссылок
для указателя базового интерфейса и освобождает интерфейс, когда счетчик
ссылок становится равен нулю.
RuntimeClass
RuntimeClass представляет собой экземпляр класса, который наследуется от набора
указанных интерфейсов. Объект RuntimeClass может обеспечить сочетание
поддержки одного или нескольких среда выполнения Windows COM-интерфейсов
или слабую ссылку на компонент.
Модуль
Module представляет коллекцию связанных объектов. Объект Module управляет
фабриками класса, создающими объекты, и регистрацией, которая позволяет
другим приложениям использовать объект.
Обратный вызов
Функция Callback создает объект, функция-член которого является обработчиком
событий (метод обратного вызова). Функция Callback используется для записи
асинхронных операций.
EventSource
EventSource используется для управления обработчиками событий делегатов .
Используйте среда выполнения Windows библиотеку шаблонов C++ для
реализации делегата и использования для EventSource добавления, удаления и
вызова делегатов.
AsyncBase
AsyncBase предоставляет виртуальные методы, представляющие среда выполнения
Windows асинхронную модель программирования. Переопределите члены этого
класса для создания пользовательского класса, который может запускать и
останавливать асинхронную операцию, а также проверять ход ее выполнения.
FtmBase
FtmBase представляет объект маршаллера в режиме свободного потока. FtmBase
создает общую таблицу интерфейса (GIT) и помогает управлять маршалингом и
прокси-объектами.
WeakRef
WeakRef — тип интеллектуального указателя, представляющий слабую ссылкуна
объект, который может быть доступен или недоступен. Объект WeakRef может
использоваться только среда выполнения Windows, а не классическим COM.
См. также
Основные API по категориям
Справочные материалы
) Важно!
) Важно!
C++
#include <Windows.Foundation.h>
#include <wrl\wrappers\corewrappers.h>
#include <wrl\client.h>
#include <stdio.h>
RoInitializeWrapper initialize(RO_INIT_MULTITHREADED);
if (FAILED(initialize))
3. Создайте фабрику
активации ABI::Windows::Foundation::IUriRuntimeClassFactory для интерфейса.
C++
ComPtr<IUriRuntimeClassFactory> uriFactory;
HRESULT hr =
GetActivationFactory(HStringReference(RuntimeClass_Windows_Foundation_U
ri).Get(), &uriFactory);
if (FAILED(hr))
C++
HString uriHString;
hr = uriHString.Set(L"http://www.microsoft.com");
if (FAILED(hr))
C++
ComPtr<IUriRuntimeClass> uri;
hr = uriFactory->CreateUri(uriHString.Get(), &uri);
if (FAILED(hr))
C++
HString domainName;
hr = uri->get_Domain(domainName.GetAddressOf());
if (FAILED(hr))
C++
C++
// wrl-consume-component.cpp
#include <Windows.Foundation.h>
#include <wrl\wrappers\corewrappers.h>
#include <wrl\client.h>
#include <stdio.h>
// Prints an error string for the provided source code line and HRESULT
return hr;
int wmain()
RoInitializeWrapper initialize(RO_INIT_MULTITHREADED);
if (FAILED(initialize))
ComPtr<IUriRuntimeClassFactory> uriFactory;
HRESULT hr =
GetActivationFactory(HStringReference(RuntimeClass_Windows_Foundation_Uri).G
et(), &uriFactory);
if (FAILED(hr))
HString uriHString;
hr = uriHString.Set(L"http://www.microsoft.com");
if (FAILED(hr))
ComPtr<IUriRuntimeClass> uri;
hr = uriFactory->CreateUri(uriHString.Get(), &uri);
if (FAILED(hr))
HString domainName;
hr = uri->get_Domain(domainName.GetAddressOf());
if (FAILED(hr))
/*
Output:
*/
Компиляция кода
Чтобы скомпилировать код, скопируйте его и вставьте его в проект Visual Studio
или вставьте его в файл с именем wrl-consume-component.cpp , а затем выполните
следующую команду в окне командной строки Visual Studio.
Совет
2 Предупреждение
C++
#include <Windows.Foundation.h>
#include <Windows.System.Threading.h>
#include <wrl/event.h>
#include <stdio.h>
#include <Objbase.h>
C++
RoInitializeWrapper initialize(RO_INIT_MULTITHREADED);
if (FAILED(initialize))
C++
// Get the activation factory for the IThreadPoolTimer interface.
ComPtr<IThreadPoolTimerStatics> timerFactory;
HRESULT hr =
GetActivationFactory(HStringReference(RuntimeClass_Windows_System_Threa
ding_ThreadPoolTimer).Get(), &timerFactory);
if (FAILED(hr))
C++
hr = timerCompleted.IsValid() ? S_OK :
HRESULT_FROM_WIN32(GetLastError());
if (FAILED(hr))
7 Примечание
C++
TimeSpan delay;
wprintf_s(L"Timer fired.\n");
TimeSpan delay;
HRESULT hr = timer->get_Delay(&delay);
if (SUCCEEDED(hr))
SetEvent(timerCompleted.Get());
return hr;
});
if (FAILED(hr))
ComPtr<IThreadPoolTimer> timer;
if (FAILED(hr))
C++
C++
// wrl-consume-async.cpp
#include <Windows.Foundation.h>
#include <Windows.System.Threading.h>
#include <wrl/event.h>
#include <stdio.h>
#include <Objbase.h>
// Prints an error string for the provided source code line and HRESULT
return hr;
int wmain()
RoInitializeWrapper initialize(RO_INIT_MULTITHREADED);
if (FAILED(initialize))
ComPtr<IThreadPoolTimerStatics> timerFactory;
HRESULT hr =
GetActivationFactory(HStringReference(RuntimeClass_Windows_System_Threading_
ThreadPoolTimer).Get(), &timerFactory);
if (FAILED(hr))
hr = timerCompleted.IsValid() ? S_OK :
HRESULT_FROM_WIN32(GetLastError());
if (FAILED(hr))
TimeSpan delay;
wprintf_s(L"Timer fired.\n");
TimeSpan delay;
HRESULT hr = timer->get_Delay(&delay);
if (SUCCEEDED(hr))
SetEvent(timerCompleted.Get());
return hr;
});
if (FAILED(hr))
ComPtr<IThreadPoolTimer> timer;
if (FAILED(hr))
/*
Output:
Timer started.
Timer fired.
*/
Компиляция кода
Чтобы скомпилировать код, скопируйте его, а затем вставьте его в проект Visual
Studio или вставьте его в файл с именем wrl-consume-async.cpp , а затем выполните
следующую команду в окне командной строки Visual Studio.
Совет
C++
#include <Windows.Foundation.h>
#include <Windows.System.Threading.h>
#include <wrl/event.h>
#include <stdio.h>
#include <Objbase.h>
C++
RoInitializeWrapper initialize(RO_INIT_MULTITHREADED);
if (FAILED(initialize))
C++
ComPtr<IThreadPoolStatics> threadPool;
HRESULT hr =
GetActivationFactory(HStringReference(RuntimeClass_Windows_System_Threa
ding_ThreadPool).Get(), &threadPool);
if (FAILED(hr))
C++
hr = threadCompleted.IsValid() ? S_OK :
HRESULT_FROM_WIN32(GetLastError());
if (FAILED(hr))
7 Примечание
Это событие выполняется только для демонстрации в составе
консольного приложения. В этом примере используется объект-событие,
чтобы удостовериться, что асинхронная операция окончится до
завершения приложения. В большинстве приложений обычно не нужно
ожидать завершения асинхронных операций.
C++
wprintf_s(L"Starting thread...\n");
ComPtr<IAsyncAction> asyncAction;
hr = threadPool->RunAsync(Callback<IWorkItemHandler>([&threadCompleted]
(IAsyncAction* asyncAction) -> HRESULT
// Print a message.
if (IsPrime(n))
primeCount++;
SetEvent(threadCompleted.Get());
return S_OK;
}).Get(), &asyncAction);
if (FAILED(hr))
wprintf_s(L"Finished.\n");
C++
// wrl-consume-asyncOp.cpp
#include <Windows.Foundation.h>
#include <Windows.System.Threading.h>
#include <wrl/event.h>
#include <stdio.h>
#include <Objbase.h>
// Prints an error string for the provided source code line and HRESULT
return hr;
bool IsPrime(int n)
if (n < 2)
return false;
if ((n % i) == 0)
return false;
return true;
int wmain()
RoInitializeWrapper initialize(RO_INIT_MULTITHREADED);
if (FAILED(initialize))
ComPtr<IThreadPoolStatics> threadPool;
HRESULT hr =
GetActivationFactory(HStringReference(RuntimeClass_Windows_System_Threading_
ThreadPool).Get(), &threadPool);
if (FAILED(hr))
hr = threadCompleted.IsValid() ? S_OK :
HRESULT_FROM_WIN32(GetLastError());
if (FAILED(hr))
wprintf_s(L"Starting thread...\n");
ComPtr<IAsyncAction> asyncAction;
hr = threadPool->RunAsync(Callback<IWorkItemHandler>([&threadCompleted]
(IAsyncAction* asyncAction) -> HRESULT
// Print a message.
if (IsPrime(n))
primeCount++;
SetEvent(threadCompleted.Get());
return S_OK;
}).Get(), &asyncAction);
if (FAILED(hr))
wprintf_s(L"Finished.\n");
/*
Output:
Starting thread...
Finished.
*/
Компиляция кода
Чтобы скомпилировать код, скопируйте его, а затем вставьте его в проект Visual
Studio или вставьте его в файл с именем wrl-consume-asyncOp.cpp , а затем
выполните следующую команду в окне командной строки Visual Studio .
2 Предупреждение
#include <Windows.Devices.Enumeration.h>
#include <wrl/event.h>
#include <stdio.h>
C++
EventRegistrationToken addedToken;
EventRegistrationToken stoppedToken;
EventRegistrationToken enumCompletedToken;
C++
RoInitializeWrapper initialize(RO_INIT_MULTITHREADED);
if (FAILED(initialize))
C++
// Create an event that is set after device enumeration completes. We
later use this event to wait for the timer to complete.
if (FAILED(hr))
7 Примечание
C++
ComPtr<IDeviceInformationStatics> watcherFactory;
hr =
ABI::Windows::Foundation::GetActivationFactory(HStringReference(Runtime
Class_Windows_Devices_Enumeration_DeviceInformation).Get(),
&watcherFactory);
if (FAILED(hr))
C++
// Create a IDeviceWatcher object from the factory.
ComPtr<IDeviceWatcher> watcher;
hr = watcherFactory->CreateWatcher(&watcher);
if (FAILED(hr))
C++
hr = watcher->add_Added(Callback<AddedHandler>([&deviceCount]
(IDeviceWatcher* watcher, IDeviceInformation*) -> HRESULT
wprintf_s(L"Added device...\n");
deviceCount++;
if (deviceCount == 10)
return watcher->Stop();
return S_OK;
}).Get(), &addedToken);
if (FAILED(hr))
hr = watcher->add_Stopped(Callback<StoppedHandler>([=,
&enumerationCompleted](IDeviceWatcher* watcher, IInspectable*) ->
HRESULT
// your app. For instance, if you only need to handle an event for
// a short period of time, you might remove the event handler when
you
SetEvent(enumerationCompleted.Get());
}).Get(), &stoppedToken);
if (FAILED(hr))
hr = watcher-
>add_EnumerationCompleted(Callback<EnumerationCompletedHandler>([]
(IDeviceWatcher* watcher, IInspectable*) -> HRESULT
wprintf_s(L"Enumeration completed.\n");
return watcher->Stop();
}).Get(), &enumCompletedToken);
if (FAILED(hr))
Совет
C++
wprintf_s(L"Starting device enumeration...\n");
hr = watcher->Start();
if (FAILED(hr))
C++
C++
// wrl-consume-events.cpp
#include <Windows.Devices.Enumeration.h>
#include <wrl/event.h>
#include <stdio.h>
// Prints an error string for the provided source code line and HRESULT
return hr;
int wmain()
// Type define the event handler types to make the code more readable.
typedef
__FITypedEventHandler_2_Windows__CDevices__CEnumeration__CDeviceWatcher_Wind
ows__CDevices__CEnumeration__CDeviceInformation AddedHandler;
typedef
__FITypedEventHandler_2_Windows__CDevices__CEnumeration__CDeviceWatcher_IIns
pectable EnumerationCompletedHandler;
typedef
__FITypedEventHandler_2_Windows__CDevices__CEnumeration__CDeviceWatcher_IIns
pectable StoppedHandler;
EventRegistrationToken addedToken;
EventRegistrationToken stoppedToken;
EventRegistrationToken enumCompletedToken;
RoInitializeWrapper initialize(RO_INIT_MULTITHREADED);
if (FAILED(initialize))
if (FAILED(hr))
ComPtr<IDeviceInformationStatics> watcherFactory;
hr =
ABI::Windows::Foundation::GetActivationFactory(HStringReference(RuntimeClass
_Windows_Devices_Enumeration_DeviceInformation).Get(), &watcherFactory);
if (FAILED(hr))
ComPtr<IDeviceWatcher> watcher;
hr = watcherFactory->CreateWatcher(&watcher);
if (FAILED(hr))
hr = watcher->add_Added(Callback<AddedHandler>([&deviceCount]
(IDeviceWatcher* watcher, IDeviceInformation*) -> HRESULT
wprintf_s(L"Added device...\n");
deviceCount++;
if (deviceCount == 10)
return watcher->Stop();
return S_OK;
}).Get(), &addedToken);
if (FAILED(hr))
hr = watcher->add_Stopped(Callback<StoppedHandler>([=,
&enumerationCompleted](IDeviceWatcher* watcher, IInspectable*) -> HRESULT
// your app. For instance, if you only need to handle an event for
// a short period of time, you might remove the event handler when
you
// no longer need it. If you handle an event for the duration of the
app,
SetEvent(enumerationCompleted.Get());
}).Get(), &stoppedToken);
if (FAILED(hr))
hr = watcher-
>add_EnumerationCompleted(Callback<EnumerationCompletedHandler>([]
(IDeviceWatcher* watcher, IInspectable*) -> HRESULT
wprintf_s(L"Enumeration completed.\n");
return watcher->Stop();
}).Get(), &enumCompletedToken);
if (FAILED(hr))
hr = watcher->Start();
if (FAILED(hr))
/*
Sample output:
Added device...
Added device...
Added device...
Added device...
Added device...
Added device...
Added device...
Added device...
Added device...
Added device...
Enumerated 10 devices.
*/
Компиляция кода
Чтобы скомпилировать код, скопируйте его, а затем вставьте его в проект Visual
Studio или вставьте его в файл с именем wrl-consume-events.cpp , а затем
выполните следующую команду в окне командной строки Visual Studio .
7 Примечание
7 Примечание
Предварительные требования
В Visual Studio 2017 и более поздних версиях поддержка UWP является
необязательным компонентом. Чтобы установить его, откройте Visual Studio
Installer в меню "Пуск" Windows и найдите свою версию Visual Studio.
Нажмите кнопку "Изменить", а затем убедитесь, что выбрана плитка
"Разработка универсальная платформа Windows". В разделе
"Дополнительные компоненты" проверьте инструменты C++ для UWP
(версия 141) для Visual Studio 2017 или средства C++ для UWP (версия 142)
для Visual Studio 2019. Затем проверьте версию windows SDK, которую вы
хотите использовать.
Веб-камера,
Ключевые моменты
Для создания пользовательского компонента Media Foundation используйте
файл определения языка MIDL, чтобы определить и реализовать интерфейс, а
затем сделать его активируемым из других компонентов.
C++
import "Windows.Media.idl";
#include <sdkddkver.h>
namespace GrayscaleTransform
[version(NTDDI_WIN8), activatable(NTDDI_WIN8)]
runtimeclass GrayscaleEffect
{
C++
#pragma once
#include "targetver.h"
#include <new>
#include <mfapi.h>
#include <mftransform.h>
#include <mfidl.h>
#include <mferror.h>
#include <strsafe.h>
#include <assert.h>
#include <D2d1helper.h>
#include <wrl\implements.h>
#include <wrl\module.h>
#include <windows.media.h>
C++
#pragma once
class VideoBufferLock
public:
m_pBuffer = pBuffer;
m_pBuffer->AddRef();
m_pBuffer->QueryInterface(IID_PPV_ARGS(&m_p2DBuffer));
~VideoBufferLock()
UnlockBuffer();
m_pBuffer->Release();
if (m_p2DBuffer)
m_p2DBuffer->Release();
// LockBuffer:
// the buffer does not expose IMF2DBuffer. You can calculate the
default stride
HRESULT LockBuffer(
HRESULT hr = S_OK;
if (m_p2DBuffer)
hr = m_p2DBuffer->Lock2D(ppbScanLine0, plStride);
else
if (SUCCEEDED(hr))
*plStride = lDefaultStride;
if (lDefaultStride < 0)
else
// buffer.
*ppbScanLine0 = pData;
return hr;
HRESULT UnlockBuffer()
if (m_p2DBuffer)
return m_p2DBuffer->Unlock2D();
else
return m_pBuffer->Unlock();
private:
IMFMediaBuffer *m_pBuffer;
IMF2DBuffer *m_p2DBuffer;
};
C++
#include "pch.h"
#include "GrayscaleTransform_h.h"
#include "BufferLock.h"
//
// * IMPORTANT: If you implement your own MFT, create a new GUID for
the CLSID. *
//
// Configuration attributes
// {7BBBB051-133B-41F5-B6AA-5AFF9B33A2CB}
// {14782342-93E8-4565-872C-D9A2973D5CBF}
// {E0BADE5D-E4B9-4689-9DBA-E2F00D9CED0E}
if (*ppT)
(*ppT)->Release();
*ppT = nullptr;
);
class CGrayscale
: public RuntimeClass<
RuntimeClassFlags<RuntimeClassType::WinRtClassicComMix>,
ABI::Windows::Media::IMediaExtension,
IMFTransform>
InspectableClass(RuntimeClass_GrayscaleTransform_GrayscaleEffect,
BaseTrust)
public:
CGrayscale();
STDMETHOD(RuntimeClassInitialize)();
// IMediaExtension
STDMETHODIMP
SetProperties(ABI::Windows::Foundation::Collections::IPropertySet
*pConfiguration);
// IMFTransform
STDMETHODIMP GetStreamLimits(
DWORD *pdwInputMinimum,
DWORD *pdwInputMaximum,
DWORD *pdwOutputMinimum,
DWORD *pdwOutputMaximum
);
STDMETHODIMP GetStreamCount(
DWORD *pcInputStreams,
DWORD *pcOutputStreams
);
STDMETHODIMP GetStreamIDs(
DWORD dwInputIDArraySize,
DWORD *pdwInputIDs,
DWORD dwOutputIDArraySize,
DWORD *pdwOutputIDs
);
STDMETHODIMP GetInputStreamInfo(
DWORD dwInputStreamID,
MFT_INPUT_STREAM_INFO * pStreamInfo
);
STDMETHODIMP GetOutputStreamInfo(
DWORD dwOutputStreamID,
MFT_OUTPUT_STREAM_INFO * pStreamInfo
);
STDMETHODIMP GetInputStreamAttributes(
DWORD dwInputStreamID,
IMFAttributes **ppAttributes
);
STDMETHODIMP GetOutputStreamAttributes(
DWORD dwOutputStreamID,
IMFAttributes **ppAttributes
);
STDMETHODIMP AddInputStreams(
DWORD cStreams,
DWORD *adwStreamIDs
);
STDMETHODIMP GetInputAvailableType(
DWORD dwInputStreamID,
IMFMediaType **ppType
);
STDMETHODIMP GetOutputAvailableType(
DWORD dwOutputStreamID,
IMFMediaType **ppType
);
STDMETHODIMP SetInputType(
DWORD dwInputStreamID,
IMFMediaType *pType,
DWORD dwFlags
);
STDMETHODIMP SetOutputType(
DWORD dwOutputStreamID,
IMFMediaType *pType,
DWORD dwFlags
);
STDMETHODIMP GetInputCurrentType(
DWORD dwInputStreamID,
IMFMediaType **ppType
);
STDMETHODIMP GetOutputCurrentType(
DWORD dwOutputStreamID,
IMFMediaType **ppType
);
STDMETHODIMP GetInputStatus(
DWORD dwInputStreamID,
DWORD *pdwFlags
);
STDMETHODIMP SetOutputBounds(
LONGLONG hnsLowerBound,
LONGLONG hnsUpperBound
);
STDMETHODIMP ProcessEvent(
DWORD dwInputStreamID,
IMFMediaEvent *pEvent
);
STDMETHODIMP ProcessMessage(
MFT_MESSAGE_TYPE eMessage,
ULONG_PTR ulParam
);
STDMETHODIMP ProcessInput(
DWORD dwInputStreamID,
IMFSample *pSample,
DWORD dwFlags
);
STDMETHODIMP ProcessOutput(
DWORD dwFlags,
DWORD cOutputBufferCount,
);
private:
~CGrayscale();
return dwInputStreamID == 0;
return dwOutputStreamID == 0;
HRESULT BeginStreaming();
HRESULT EndStreaming();
HRESULT OnFlush();
HRESULT UpdateFormatInfo();
CRITICAL_SECTION m_critSec;
// Transformation parameters
D2D_RECT_U m_rcDest; //
Destination rectangle for the effect.
// Streaming
bool m_bStreamingInitialized;
// Fomat information
UINT32 m_imageWidthInPixels;
UINT32 m_imageHeightInPixels;
IMFAttributes *m_pAttributes;
IMAGE_TRANSFORM_FN m_pTransformFn;
};
ActivatableClass(CGrayscale);
/*
Sets the destination rectangle for the effect. Pixels outside the
destination
Rotates the chroma values of each pixel. The attribue value is the
angle of
as a scaling transform.
1. The MFT has fixed streams: One input stream and one output stream.
5. If both types are set, no type can be set until the current type is
cleared.
8. Streaming:
MFT_MESSAGE_NOTIFY_BEGIN_STREAMING message.
streaming.
*/
MFVideoFormat_NV12,
MFVideoFormat_YUY2,
MFVideoFormat_UYVY
};
inline T clamp(const T& val, const T& minVal, const T& maxVal)
return (val < minVal ? minVal : (val > maxVal ? maxVal : val));
// TransformChroma:
pt = mat.TransformPoint(pt);
//-------------------------------------------------------------------
//
//
//
//-------------------------------------------------------------------
void TransformImage_UYVY(
_Inout_updates_(_Inexpressible_(lDestStride * dwHeightInPixels))
BYTE *pDest,
DWORD y = 0;
pSrc += lSrcStride;
pDest += lDestStride;
// Byte order is U0 Y0 V0 Y1
else
#pragma warning(push)
pDest_Pixel[x] = pSrc_Pixel[x];
pDest_Pixel[x+1] = pSrc_Pixel[x+1];
#pragma warning(pop)
pDest += lDestStride;
pSrc += lSrcStride;
pSrc += lSrcStride;
pDest += lDestStride;
void TransformImage_YUY2(
_Inout_updates_(_Inexpressible_(lDestStride * dwHeightInPixels))
BYTE *pDest,
DWORD y = 0;
pSrc += lSrcStride;
pDest += lDestStride;
// Byte order is Y0 U0 Y1 V0
else
#pragma warning(push)
pDest_Pixel[x] = pSrc_Pixel[x];
pDest_Pixel[x+1] = pSrc_Pixel[x+1];
#pragma warning(pop)
pDest += lDestStride;
pSrc += lSrcStride;
pSrc += lSrcStride;
pDest += lDestStride;
void TransformImage_NV12(
_Inout_updates_(_Inexpressible_(2 * lDestStride *
dwHeightInPixels)) BYTE *pDest,
// Y plane
pDest += lDestStride;
pSrc += lSrcStride;
// U-V plane
// NOTE: The U-V plane has 1/2 the number of lines as the Y plane.
DWORD y = 0;
pSrc += lSrcStride;
pDest += lDestStride;
BYTE u = pSrc[x];
BYTE v = pSrc[x+1];
pDest[x] = u;
pDest[x+1] = v;
else
pDest[x] = pSrc[x];
pDest[x+1] = pSrc[x+1];
pDest += lDestStride;
pSrc += lSrcStride;
pSrc += lSrcStride;
pDest += lDestStride;
CGrayscale::CGrayscale() :
m_imageWidthInPixels(0), m_imageHeightInPixels(0),
m_cbImageSize(0),
m_transform(D2D1::Matrix3x2F::Identity()), m_rcDest(D2D1::RectU()),
m_bStreamingInitialized(false),
m_pAttributes(nullptr)
CGrayscale::~CGrayscale()
SafeRelease(&m_pInputType);
SafeRelease(&m_pOutputType);
SafeRelease(&m_pSample);
SafeRelease(&m_pAttributes);
DeleteCriticalSection(&m_critSec);
STDMETHODIMP CGrayscale::RuntimeClassInitialize()
// IMediaExtension methods
//-------------------------------------------------------------------
// SetProperties
//-------------------------------------------------------------------
HRESULT
CGrayscale::SetProperties(ABI::Windows::Foundation::Collections::IPrope
rtySet *pConfiguration)
return S_OK;
//-------------------------------------------------------------------
// GetStreamLimits
//-------------------------------------------------------------------
HRESULT CGrayscale::GetStreamLimits(
DWORD *pdwInputMinimum,
DWORD *pdwInputMaximum,
DWORD *pdwOutputMinimum,
DWORD *pdwOutputMaximum
*pdwInputMinimum = 1;
*pdwInputMaximum = 1;
*pdwOutputMinimum = 1;
*pdwOutputMaximum = 1;
return S_OK;
HRESULT CGrayscale::GetStreamCount(
DWORD *pcInputStreams,
DWORD *pcOutputStreams
*pcInputStreams = 1;
*pcOutputStreams = 1;
return S_OK;
//-------------------------------------------------------------------
// GetStreamIDs
//-------------------------------------------------------------------
HRESULT CGrayscale::GetStreamIDs(
DWORD dwInputIDArraySize,
DWORD *pdwInputIDs,
DWORD dwOutputIDArraySize,
DWORD *pdwOutputIDs
// streams AND the stream IDs are numbered sequentially from zero
(that is, the
return E_NOTIMPL;
//-------------------------------------------------------------------
// GetInputStreamInfo
//-------------------------------------------------------------------
HRESULT CGrayscale::GetInputStreamInfo(
DWORD dwInputStreamID,
MFT_INPUT_STREAM_INFO * pStreamInfo
EnterCriticalSection(&m_critSec);
if (!IsValidInputStream(dwInputStreamID))
LeaveCriticalSection(&m_critSec);
return MF_E_INVALIDSTREAMNUMBER;
pStreamInfo->hnsMaxLatency = 0;
pStreamInfo->dwFlags = MFT_INPUT_STREAM_WHOLE_SAMPLES |
MFT_INPUT_STREAM_SINGLE_SAMPLE_PER_BUFFER;
if (m_pInputType == nullptr)
pStreamInfo->cbSize = 0;
else
pStreamInfo->cbSize = m_cbImageSize;
pStreamInfo->cbMaxLookahead = 0;
pStreamInfo->cbAlignment = 0;
LeaveCriticalSection(&m_critSec);
return S_OK;
//-------------------------------------------------------------------
// GetOutputStreamInfo
//-------------------------------------------------------------------
HRESULT CGrayscale::GetOutputStreamInfo(
DWORD dwOutputStreamID,
MFT_OUTPUT_STREAM_INFO * pStreamInfo
EnterCriticalSection(&m_critSec);
if (!IsValidOutputStream(dwOutputStreamID))
LeaveCriticalSection(&m_critSec);
return MF_E_INVALIDSTREAMNUMBER;
pStreamInfo->dwFlags =
MFT_OUTPUT_STREAM_WHOLE_SAMPLES |
MFT_OUTPUT_STREAM_SINGLE_SAMPLE_PER_BUFFER |
MFT_OUTPUT_STREAM_FIXED_SAMPLE_SIZE ;
if (m_pOutputType == nullptr)
pStreamInfo->cbSize = 0;
else
pStreamInfo->cbSize = m_cbImageSize;
pStreamInfo->cbAlignment = 0;
LeaveCriticalSection(&m_critSec);
return S_OK;
EnterCriticalSection(&m_critSec);
*ppAttributes = m_pAttributes;
(*ppAttributes)->AddRef();
LeaveCriticalSection(&m_critSec);
return S_OK;
HRESULT CGrayscale::GetInputStreamAttributes(
DWORD dwInputStreamID,
IMFAttributes **ppAttributes
return E_NOTIMPL;
//-------------------------------------------------------------------
// GetOutputStreamAttributes
//-------------------------------------------------------------------
HRESULT CGrayscale::GetOutputStreamAttributes(
DWORD dwOutputStreamID,
IMFAttributes **ppAttributes
return E_NOTIMPL;
//-------------------------------------------------------------------
// DeleteInputStream
//-------------------------------------------------------------------
return E_NOTIMPL;
//-------------------------------------------------------------------
// AddInputStreams
//-------------------------------------------------------------------
HRESULT CGrayscale::AddInputStreams(
DWORD cStreams,
DWORD *adwStreamIDs
return E_NOTIMPL;
//-------------------------------------------------------------------
// GetInputAvailableType
//-------------------------------------------------------------------
HRESULT CGrayscale::GetInputAvailableType(
DWORD dwInputStreamID,
IMFMediaType **ppType
EnterCriticalSection(&m_critSec);
if (!IsValidInputStream(dwInputStreamID))
LeaveCriticalSection(&m_critSec);
return MF_E_INVALIDSTREAMNUMBER;
HRESULT hr = S_OK;
if (m_pOutputType == nullptr)
hr = OnGetPartialType(dwTypeIndex, ppType);
hr = MF_E_NO_MORE_TYPES;
else
*ppType = m_pOutputType;
(*ppType)->AddRef();
LeaveCriticalSection(&m_critSec);
return hr;
HRESULT CGrayscale::GetOutputAvailableType(
DWORD dwOutputStreamID,
IMFMediaType **ppType
EnterCriticalSection(&m_critSec);
if (!IsValidOutputStream(dwOutputStreamID))
LeaveCriticalSection(&m_critSec);
return MF_E_INVALIDSTREAMNUMBER;
HRESULT hr = S_OK;
if (m_pInputType == nullptr)
hr = OnGetPartialType(dwTypeIndex, ppType);
hr = MF_E_NO_MORE_TYPES;
else
*ppType = m_pInputType;
(*ppType)->AddRef();
LeaveCriticalSection(&m_critSec);
return hr;
HRESULT CGrayscale::SetInputType(
DWORD dwInputStreamID,
DWORD dwFlags
// Validate flags.
return E_INVALIDARG;
EnterCriticalSection(&m_critSec);
if (!IsValidInputStream(dwInputStreamID))
LeaveCriticalSection(&m_critSec);
return MF_E_INVALIDSTREAMNUMBER;
HRESULT hr = S_OK;
// Does the caller want us to set the type, or just test it?
if (HasPendingOutput())
hr = MF_E_TRANSFORM_CANNOT_CHANGE_MEDIATYPE_WHILE_PROCESSING;
goto done;
if (pType)
hr = OnCheckInputType(pType);
if (FAILED(hr))
goto done;
// The type is OK. Set the type, unless the caller was just
testing.
if (bReallySet)
OnSetInputType(pType);
hr = EndStreaming();
done:
LeaveCriticalSection(&m_critSec);
return hr;
HRESULT CGrayscale::SetOutputType(
DWORD dwOutputStreamID,
DWORD dwFlags
// Validate flags.
return E_INVALIDARG;
EnterCriticalSection(&m_critSec);
if (!IsValidOutputStream(dwOutputStreamID))
LeaveCriticalSection(&m_critSec);
return MF_E_INVALIDSTREAMNUMBER;
HRESULT hr = S_OK;
// Does the caller want us to set the type, or just test it?
if (HasPendingOutput())
hr = MF_E_TRANSFORM_CANNOT_CHANGE_MEDIATYPE_WHILE_PROCESSING;
goto done;
if (pType)
hr = OnCheckOutputType(pType);
if (FAILED(hr))
goto done;
// The type is OK. Set the type, unless the caller was just
testing.
if (bReallySet)
OnSetOutputType(pType);
hr = EndStreaming();
done:
LeaveCriticalSection(&m_critSec);
return hr;
HRESULT CGrayscale::GetInputCurrentType(
DWORD dwInputStreamID,
IMFMediaType **ppType
HRESULT hr = S_OK;
EnterCriticalSection(&m_critSec);
if (!IsValidInputStream(dwInputStreamID))
hr = MF_E_INVALIDSTREAMNUMBER;
else if (!m_pInputType)
hr = MF_E_TRANSFORM_TYPE_NOT_SET;
else
*ppType = m_pInputType;
(*ppType)->AddRef();
LeaveCriticalSection(&m_critSec);
return hr;
HRESULT CGrayscale::GetOutputCurrentType(
DWORD dwOutputStreamID,
IMFMediaType **ppType
HRESULT hr = S_OK;
EnterCriticalSection(&m_critSec);
if (!IsValidOutputStream(dwOutputStreamID))
hr = MF_E_INVALIDSTREAMNUMBER;
else if (!m_pOutputType)
hr = MF_E_TRANSFORM_TYPE_NOT_SET;
else
*ppType = m_pOutputType;
(*ppType)->AddRef();
LeaveCriticalSection(&m_critSec);
return hr;
HRESULT CGrayscale::GetInputStatus(
DWORD dwInputStreamID,
DWORD *pdwFlags
EnterCriticalSection(&m_critSec);
if (!IsValidInputStream(dwInputStreamID))
LeaveCriticalSection(&m_critSec);
return MF_E_INVALIDSTREAMNUMBER;
if (m_pSample == nullptr)
*pdwFlags = MFT_INPUT_STATUS_ACCEPT_DATA;
else
*pdwFlags = 0;
LeaveCriticalSection(&m_critSec);
return S_OK;
EnterCriticalSection(&m_critSec);
// The MFT can produce an output sample if (and only if) there an
input sample.
if (m_pSample != nullptr)
*pdwFlags = MFT_OUTPUT_STATUS_SAMPLE_READY;
else
*pdwFlags = 0;
LeaveCriticalSection(&m_critSec);
return S_OK;
//-------------------------------------------------------------------
// SetOutputBounds
// Sets the range of time stamps that the MFT will output.
//-------------------------------------------------------------------
HRESULT CGrayscale::SetOutputBounds(
LONGLONG hnsLowerBound,
LONGLONG hnsUpperBound
)
return E_NOTIMPL;
//-------------------------------------------------------------------
// ProcessEvent
//-------------------------------------------------------------------
HRESULT CGrayscale::ProcessEvent(
DWORD dwInputStreamID,
IMFMediaEvent *pEvent
// This MFT does not handle any stream events, so the method can
return E_NOTIMPL;
//-------------------------------------------------------------------
// ProcessMessage
//-------------------------------------------------------------------
HRESULT CGrayscale::ProcessMessage(
MFT_MESSAGE_TYPE eMessage,
ULONG_PTR ulParam
EnterCriticalSection(&m_critSec);
HRESULT hr = S_OK;
switch (eMessage)
case MFT_MESSAGE_COMMAND_FLUSH:
hr = OnFlush();
break;
case MFT_MESSAGE_COMMAND_DRAIN:
//
break;
case MFT_MESSAGE_SET_D3D_MANAGER:
// The pipeline should never send this message unless the MFT
sets the MF_SA_D3D_AWARE
// this case.
hr = E_NOTIMPL;
break;
case MFT_MESSAGE_NOTIFY_BEGIN_STREAMING:
hr = BeginStreaming();
break;
case MFT_MESSAGE_NOTIFY_END_STREAMING:
hr = EndStreaming();
break;
// The next two messages do not require any action from this MFT.
case MFT_MESSAGE_NOTIFY_END_OF_STREAM:
break;
case MFT_MESSAGE_NOTIFY_START_OF_STREAM:
break;
LeaveCriticalSection(&m_critSec);
return hr;
HRESULT CGrayscale::ProcessInput(
DWORD dwInputStreamID,
IMFSample *pSample,
DWORD dwFlags
if (dwFlags != 0)
HRESULT hr = S_OK;
EnterCriticalSection(&m_critSec);
if (!IsValidInputStream(dwInputStreamID))
hr = MF_E_INVALIDSTREAMNUMBER;
goto done;
// The client must set input and output types before calling
ProcessInput.
if (!m_pInputType || !m_pOutputType)
hr = MF_E_NOTACCEPTING;
goto done;
if (m_pSample != nullptr)
goto done;
// Initialize streaming.
hr = BeginStreaming();
if (FAILED(hr))
goto done;
m_pSample = pSample;
done:
LeaveCriticalSection(&m_critSec);
return hr;
//-------------------------------------------------------------------
// ProcessOutput
//-------------------------------------------------------------------
HRESULT CGrayscale::ProcessOutput(
DWORD dwFlags,
DWORD cOutputBufferCount,
DWORD *pdwStatus
// This MFT does not accept any flags for the dwFlags parameter.
if (dwFlags != 0)
return E_INVALIDARG;
if (cOutputBufferCount != 1)
return E_INVALIDARG;
if (pOutputSamples[0].pSample == nullptr)
return E_INVALIDARG;
HRESULT hr = S_OK;
EnterCriticalSection(&m_critSec);
if (m_pSample == nullptr)
hr = MF_E_TRANSFORM_NEED_MORE_INPUT;
goto done;
// Initialize streaming.
hr = BeginStreaming();
if (FAILED(hr))
goto done;
hr = m_pSample->ConvertToContiguousBuffer(&pInput);
if (FAILED(hr))
goto done;
hr = pOutputSamples[0].pSample-
>ConvertToContiguousBuffer(&pOutput);
if (FAILED(hr))
goto done;
hr = OnProcessOutput(pInput, pOutput);
if (FAILED(hr))
goto done;
pOutputSamples[0].dwStatus = 0;
*pdwStatus = 0;
// Copy the duration and time stamp from the input sample, if
present.
LONGLONG hnsDuration = 0;
LONGLONG hnsTime = 0;
if (SUCCEEDED(m_pSample->GetSampleDuration(&hnsDuration)))
hr = pOutputSamples[0].pSample->SetSampleDuration(hnsDuration);
if (FAILED(hr))
goto done;
if (SUCCEEDED(m_pSample->GetSampleTime(&hnsTime)))
hr = pOutputSamples[0].pSample->SetSampleTime(hnsTime);
done:
SafeRelease(&pInput);
SafeRelease(&pOutput);
LeaveCriticalSection(&m_critSec);
return hr;
// PRIVATE METHODS
// All methods that follow are private to this MFT and are not part of
the IMFTransform interface.
//
return MF_E_NO_MORE_TYPES;
HRESULT hr = MFCreateMediaType(&pmt);
if (FAILED(hr))
goto done;
hr = pmt->SetGUID(MF_MT_MAJOR_TYPE, MFMediaType_Video);
if (FAILED(hr))
goto done;
hr = pmt->SetGUID(MF_MT_SUBTYPE, g_MediaSubtypes[dwTypeIndex]);
if (FAILED(hr))
goto done;
*ppmt = pmt;
(*ppmt)->AddRef();
done:
SafeRelease(&pmt);
return hr;
assert(pmt != nullptr);
HRESULT hr = S_OK;
if (m_pOutputType != nullptr)
DWORD flags = 0;
hr = pmt->IsEqual(m_pOutputType, &flags);
if (hr != S_OK)
hr = MF_E_INVALIDMEDIATYPE;
else
hr = OnCheckMediaType(pmt);
return hr;
assert(pmt != nullptr);
HRESULT hr = S_OK;
if (m_pInputType != nullptr)
DWORD flags = 0;
hr = pmt->IsEqual(m_pInputType, &flags);
if (hr != S_OK)
hr = MF_E_INVALIDMEDIATYPE;
else
hr = OnCheckMediaType(pmt);
return hr;
GUID major_type;
if (FAILED(hr))
goto done;
if (major_type != MFMediaType_Video)
hr = MF_E_INVALIDMEDIATYPE;
goto done;
GUID subtype;
hr = pmt->GetGUID(MF_MT_SUBTYPE, &subtype);
if (FAILED(hr))
goto done;
if (subtype == g_MediaSubtypes[i])
bFoundMatchingSubtype = TRUE;
break;
if (!bFoundMatchingSubtype)
goto done;
hr = MF_E_INVALIDMEDIATYPE;
done:
return hr;
//
SafeRelease(&m_pInputType);
m_pInputType = pmt;
if (m_pInputType)
m_pInputType->AddRef();
UpdateFormatInfo();
//
SafeRelease(&m_pOutputType);
m_pOutputType = pmt;
if (m_pOutputType)
m_pOutputType->AddRef();
//
HRESULT CGrayscale::BeginStreaming()
HRESULT hr = S_OK;
if (!m_bStreamingInitialized)
RECT rcDest;
hr = m_pAttributes->GetBlob(MFT_GRAYSCALE_DESTINATION_RECT,
(UINT8*)&rcDest, sizeof(rcDest), nullptr);
hr = S_OK;
else if (SUCCEEDED(hr))
else
goto done;
m_bStreamingInitialized = true;
done:
return hr;
// End streaming.
HRESULT CGrayscale::EndStreaming()
m_bStreamingInitialized = false;
return S_OK;
VideoBufferLock inputLock(pIn);
VideoBufferLock outputLock(pOut);
LONG lDefaultStride = 0;
if (FAILED(hr))
goto done;
hr = inputLock.LockBuffer(lDefaultStride, m_imageHeightInPixels,
&pSrc, &lSrcStride);
if (FAILED(hr))
goto done;
hr = outputLock.LockBuffer(lDefaultStride, m_imageHeightInPixels,
&pDest, &lDestStride);
if (FAILED(hr))
goto done;
if (m_pTransformFn)
m_imageWidthInPixels, m_imageHeightInPixels);
else
hr = E_UNEXPECTED;
goto done;
hr = pOut->SetCurrentLength(m_cbImageSize);
done:
return hr;
HRESULT CGrayscale::OnFlush()
// For this MFT, flushing just means releasing the input sample.
SafeRelease(&m_pSample);
return S_OK;
HRESULT CGrayscale::UpdateFormatInfo()
HRESULT hr = S_OK;
m_imageWidthInPixels = 0;
m_imageHeightInPixels = 0;
m_cbImageSize = 0;
m_pTransformFn = nullptr;
if (m_pInputType != nullptr)
hr = m_pInputType->GetGUID(MF_MT_SUBTYPE, &subtype);
if (FAILED(hr))
goto done;
if (subtype == MFVideoFormat_YUY2)
m_pTransformFn = TransformImage_YUY2;
m_pTransformFn = TransformImage_UYVY;
m_pTransformFn = TransformImage_NV12;
else
hr = E_UNEXPECTED;
goto done;
hr = MFGetAttributeSize(m_pInputType, MF_MT_FRAME_SIZE,
&m_imageWidthInPixels, &m_imageHeightInPixels);
if (FAILED(hr))
goto done;
hr = GetImageSize(subtype.Data1, m_imageWidthInPixels,
m_imageHeightInPixels, &m_cbImageSize);
done:
return hr;
HRESULT hr = S_OK;
switch (fcc)
case FOURCC_YUY2:
case FOURCC_UYVY:
// check overflow
hr = E_INVALIDARG;
else
// 16 bpp
break;
case FOURCC_NV12:
// check overflow
hr = E_INVALIDARG;
else
// 12 bpp
break;
default:
return hr;
LONG lStride = 0;
HRESULT hr = pType->GetUINT32(MF_MT_DEFAULT_STRIDE,
(UINT32*)&lStride);
if (FAILED(hr))
UINT32 width = 0;
UINT32 height = 0;
hr = pType->GetGUID(MF_MT_SUBTYPE, &subtype);
if (SUCCEEDED(hr))
if (SUCCEEDED(hr))
if (subtype == MFVideoFormat_NV12)
lStride = width;
else
hr = E_INVALIDARG;
if (SUCCEEDED(hr))
(void)pType->SetUINT32(MF_MT_DEFAULT_STRIDE,
UINT32(lStride));
if (SUCCEEDED(hr))
*plStride = lStride;
return hr;
//
// - The rectangle is not flipped (top > bottom, left > right)
//
return false;
return false;
return true;
idl
EXPORTS
DllCanUnloadNow PRIVATE
DllGetActivationFactory PRIVATE
DllGetClassObject PRIVATE
C++
#include "pch.h"
#include <initguid.h>
#include <wrl\module.h>
if (DLL_PROCESS_ATTACH == reason)
DisableThreadLibraryCalls(hInstance);
return TRUE;
return
Module<InProc>::GetModule().GetActivationFactory(activatibleClassId,
factory);
STDAPI DllCanUnloadNow()
XML
<StackPanel>
</StackPanel>
</StackPanel>
</StackPanel>
using System;
using Windows.Devices.Enumeration;
using Windows.Media.Capture;
using Windows.Media.Effects;
using Windows.Media.MediaProperties;
using Windows.Storage.Streams;
using Windows.UI;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Media.Imaging;
using Windows.UI.Xaml.Navigation;
namespace MediaCapture
public MainPage()
this.InitializeComponent();
StatusBlock.Foreground = statusBrush;
StatusBlock.Text = text;
StatusBlock.Foreground = exceptionBrush;
StatusBlock.Text = ex.Message;
try
StartDevice.IsEnabled = false;
// Enumerate webcams.
ShowStatusMessage("Enumerating webcams...");
if (devInfoCollection.Count == 0)
return;
mediaCapture = new
Windows.Media.Capture.MediaCapture();
settings.VideoDeviceId = devInfoCollection[0].Id;
await mediaCapture.InitializeAsync(settings);
TakePhoto.IsEnabled = true;
AddRemoveEffect.IsEnabled = true;
ShowExceptionMessage(ex);
try
ShowStatusMessage("Taking photo...");
TakePhoto.IsEnabled = false;
await
mediaCapture.CapturePhotoToStreamAsync(ImageEncodingProperties.CreateJp
eg(), photoStream);
photoStream.Seek(0);
await bmpimg.SetSourceAsync(photoStream);
CapturedImage.Source = bmpimg;
TakePhoto.IsEnabled = true;
ShowStatusMessage("Photo taken");
ShowExceptionMessage(ex);
TakePhoto.IsEnabled = true;
try
AddRemoveEffect.IsEnabled = false;
await mediaCapture.AddVideoEffectAsync(def,
MediaStreamType.Photo);
AddRemoveEffect.IsEnabled = true;
ShowExceptionMessage(ex);
try
AddRemoveEffect.IsEnabled = false;
await
mediaCapture.ClearEffectsAsync(Windows.Media.Capture.MediaStreamType.Ph
oto);
AddRemoveEffect.IsEnabled = true;
ShowExceptionMessage(ex);
C++
import "ocidl.idl";
[uuid(0DBABB94-CE99-42F7-ACBD-E698B2332C60), version(1.0)]
[uuid(9D3E6826-CB8E-4D86-8B14-89F0D7EFCD01), version(1.0)]
library CalculatorComponentLib
[uuid(E68F5EDD-6257-4E72-A10B-4067ED8E85F2), version(1.0)]
coclass CalculatorComponent
};
C++
#include "CalculatorComponent_h.h"
#include <wrl.h>
public:
CalculatorComponent()
*value = a + b;
return S_OK;
};
CoCreatableClass(CalculatorComponent);
C++
#include <wrl\module.h>
#if !defined(__WRL_CLASSIC_COM__)
return
Module<InProc>::GetModule().GetActivationFactory(activatibleClassId,
factory);
#endif
#if !defined(__WRL_WINRT_STRICT__)
#endif
STDAPI DllCanUnloadNow()
if (reason == DLL_PROCESS_ATTACH)
DisableThreadLibraryCalls(hinst);
return TRUE;
LIBRARY
EXPORTS
DllGetActivationFactory PRIVATE
DllGetClassObject PRIVATE
DllCanUnloadNow PRIVATE
[HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{E68F5EDD-6257-4E72-A10B-
4067ED8E85F2}]
@="CalculatorComponent Class"
[HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{E68F5EDD-6257-4E72-A10B-
4067ED8E85F2}\InprocServer32]
@="<dll-path>"
"ThreadingModel"="Apartment"
[HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{E68F5EDD-6257-4E72-A10B-
4067ED8E85F2}\Programmable]
[HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{E68F5EDD-6257-4E72-A10B-
4067ED8E85F2}\TypeLib]
@="{9D3E6826-CB8E-4D86-8B14-89F0D7EFCD01}"
[HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{E68F5EDD-6257-4E72-A10B-
4067ED8E85F2}\Version]
@="1.0"
C++
#include "..\CalculatorComponent\CalculatorComponent_h.h"
// Prints an error string for the provided source code line and HRESULT
return hr;
int wmain()
HRESULT hr;
hr = CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED);
if (FAILED(hr))
hr = CoCreateInstance(CLSID_CalculatorComponent, nullptr,
CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&calc));
if (SUCCEEDED(hr))
int result;
hr = calc->Add(4, 5, &result);
if (FAILED(hr))
PrintError(__LINE__, hr);
else
calc->Release();
else
PrintError(__LINE__, hr);
}
CoUninitialize();
return hr;
/* Output:
result = 9
*/
Отказоустойчивость
В этом документе используются стандартные функции COM для демонстрации
использования библиотеки шаблонов среда выполнения Windows C++ для
создания com-компонента и его доступности для любой технологии с поддержкой
COM. Вы также можете использовать среда выполнения Windows типов библиотек
шаблонов C++, таких как Microsoft::WRL::ComPtr в классическом приложении для
управления временем существования COM и других объектов. Следующий код
использует библиотеку шаблонов среда выполнения Windows C++ для управления
временем существования указателя ICalculatorComponent . Класс CoInitializeWrapper
является программой-оболочкой RAII, которая гарантирует, что библиотека COM
освобождена и время ее жизни превысит время жизни объекта интеллектуального
указателя ComPtr .
C++
#include <wrl.h>
#include "..\CalculatorComponent\CalculatorComponent_h.h"
// Prints an error string for the provided source code line and HRESULT
return hr;
int wmain()
HRESULT hr;
class CoInitializeWrapper
HRESULT _hr;
public:
CoInitializeWrapper(DWORD flags)
~CoInitializeWrapper()
if (SUCCEEDED(_hr))
CoUninitialize();
}
operator HRESULT()
return _hr;
};
CoInitializeWrapper initialize(COINIT_APARTMENTTHREADED);
if (FAILED(initialize))
hr = CoCreateInstance(CLSID_CalculatorComponent, nullptr,
CLSCTX_INPROC_SERVER, IID_PPV_ARGS(calc.GetAddressOf()));
if (SUCCEEDED(hr))
int result;
hr = calc->Add(4, 5, &result);
if (FAILED(hr))
else
return 0;
Здесь приведено два примера. В первом примере используется функция Make для
создания экземпляра компонента. Во втором примере для создания компонента,
который может создать ошибку во время построения, используется функция
MakeAndInitialize . (Так как COM обычно использует значения HRESULT вместо
) Важно!
2. Добавьте в проект файл Midl File (IDL ), присвойте файлу ILogger.idl имя и
добавьте следующий код:
C++
import "ocidl.idl";
[uuid(AFDB9683-F18A-4B85-90D1-B6158DAFA46C)]
C++
#include <wrl\implements.h>
#include <comutil.h>
#include "ILogger_h.h"
public:
wprintf_s(L"%s\n", text);
return S_OK;
private:
~CConsoleWriter()
};
int wmain()
return hr;
/* Output:
Logger ready.
*/
C++
public:
return S_OK;
private:
PWSTR m_category;
~CConsoleWriter()
CoTaskMemFree(m_category);
};
C++
int wmain()
ComPtr<CConsoleWriter> writer;
if (FAILED(hr))
return hr;
hr = writer->Log(L"Logger ready.");
return hr;
/* Output:
*/
Microsoft::WRL::Make
Microsoft::WRL::D etails::MakeAndInitialize
Практическое руководство.
Использование winmdidl.exe и
midlrt.exe для создания H-файлов из
метаданных Windows
Статья • 03.04.2023
Расположение инструментов
По умолчанию в [Windows 8.1 winmdidl.exe и midlrt.exe находятся в папке
C:\Program Files (x86)\Windows Kits\8.1\. Различные версии этих инструментов также
доступны в папках \bin\x86\ и \bin\x64\.
/nologo
/suppressversioncheck
Не используется.
/Время
/outdir:dir
/banner:file
/utf8
Winmdfile
Примеры
В следующем примере показана работа команды winmdidl в командной строке
Visual Studio x86. Она определяет выходную папку и файл, содержащий
специальный текст баннера, который следует добавить в сгенерированный IDL-
файл.
/outdir:c:\users\giraffe\documents\ /banner:c:\users\giraffe\documents\banner.txt
"C:\Users\giraffe\Documents\Visual Studio
2013\Projects\Test_for_winmdidl\Debug\Test_for_winmdidl\test_for_winmdidl.winmd"
Создание c:\users\giraffe\documents\\Test_for_winmdidl.idl
"c:\users\username\documents\test_for_winmdidl.idl" /metadata_dir
"C:\Windows\System32\WinMetadata"
Комментарии
Выходной файл операции winmdidl будет иметь то же имя, что и входной файл, но
с расширением IDL.
Классы
Заголовок Описание
Структуры
Заголовок Описание
Функции
Заголовок Описание
Макросы
Заголовок Описание
7 Примечание
В этом разделе
Пространство имен Microsoft::WRL
Связанные разделы
Библиотека шаблонов C++ среды выполнения Windows (WRL)
Синтаксис
C++
namespace Microsoft::WRL;
Члены
Определения типов
Имя Описание
Классы
name Описание
Структуры
Имя Описание
Перечисления
Имя Описание
Имя Описание
Функции
Имя Описание
Требования
Заголовок: async.h, client.h, corewrappers.h, event.h, ftm.h, implements.h, internal.h,
module.h
Синтаксис
C++
ActivatableClass(
className
);
ActivatableClassWithFactory(
className,
factory
);
ActivatableClassWithFactoryEx(
className,
factory,
serverName
);
Параметры
Classname
фабрика
serverName
Комментарии
Не используйте эти макросы с классической моделью COM, если только вы не
используете директиву #undef , чтобы убедиться, что __WRL_WINRT_STRICT__
определение макроса удалено.
Требования
Заголовок: module.h
Синтаксис
C++
template <
typename I0 = Details::Nil,
typename I1 = Details::Nil,
typename I2 = Details::Nil
>
class ActivationFactory :
public Details::RuntimeClass<
typename Details::InterfaceListHelper<
IActivationFactory,
I0,
I1,
I2,
Details::Nil
>::TypeT,
RuntimeClassFlags<WinRt | InhibitWeakReference>,
false
>;
Параметры
I0
Нулевой интерфейс.
I1
Первый интерфейс.
I2
Второй интерфейс.
Комментарии
ActivationFactory предоставляет методы регистрации и основные функциональные
C++
STDMETHOD(ActivateInstance) (_Outptr_result_nullonfailure_
IInspectable** ppvObject)
// my custom implementation
return S_OK;
};
ActivatableClassWithFactory(MyClass, MyClassFactory);
//ActivatableClassWithFactory(MyClass, SimpleActivationFactory);
Члены
Открытые конструкторы
name Описание
Открытые методы
name Описание
Иерархия наследования
I0
ChainInterfaces
I0
RuntimeClassBase
ImplementsHelper
DontUseNewUseMake
RuntimeClassFlags
RuntimeClassBaseT
RuntimeClass
ActivationFactory
Требования
Заголовок: module.h
ActivationFactory::ActivationFactory
Инициализирует класс ActivationFactory .
C++
ActivationFactory();
ActivationFactory::AddRef
Увеличивает количество ссылок текущего ActivationFactory объекта.
C++
STDMETHOD_(
ULONG,
AddRef
)();
Возвращаемое значение
Значение S_OK, если операция завершилась успешно; в противном случае —
значение HRESULT, описывающее тип сбоя.
ActivationFactory::GetIids
Извлекает массив идентификаторов реализованного интерфейса.
C++
STDMETHOD(
GetIids
Параметры
iidCount
iids
Возвращаемое значение
Значение S_OK, если операция завершилась успешно; в противном случае —
значение HRESULT, описывающее тип сбоя. E_OUTOFMEMORY является возможной
ошибкой HRESULT.
ActivationFactory::GetRuntimeClassName
Возвращает имя класса среды выполнения объекта, который создает текущий
ActivationFactory экземпляр.
C++
STDMETHOD(
GetRuntimeClassName
Параметры
runtimeName
Возвращаемое значение
Значение S_OK, если операция завершилась успешно; в противном случае —
значение HRESULT, описывающее тип сбоя.
ActivationFactory::GetTrustLevel
Возвращает уровень доверия объекта, который создает текущий ActivationFactory
экземпляр.
C++
STDMETHOD(
GetTrustLevel
Параметры
trustLvl
Возвращаемое значение
S_OK в случае успешного выполнения; В противном случае возникает ошибка
утверждения, а для trustLvl задано значение FullTrust .
ActivationFactory::QueryInterface
Извлекает указатель на указанный интерфейс.
C++
STDMETHOD(
QueryInterface
Параметры
riid
Идентификатор интерфейса.
ppvObject
Возвращаемое значение
Значение S_OK, если операция завершилась успешно; в противном случае —
значение HRESULT, описывающее тип сбоя.
ActivationFactory::Release
Уменьшает количество ссылок текущего ActivationFactory объекта.
C++
STDMETHOD_(
ULONG,
Release
)();
Возвращаемое значение
Значение S_OK, если операция завершилась успешно; в противном случае —
значение HRESULT, описывающее тип сбоя.
Класс AgileActivationFactory
Статья • 03.04.2023
Синтаксис
C++
template <
typename I0 = Details::Nil,
typename I1 = Details::Nil,
typename I2 = Details::Nil,
>
class AgileActivationFactory :
public ActivationFactory<
Implements<FtmBase, I0>,
I1,
I2,
cacheFlagValue
>;
Требования
Заголовок: module.h
Класс ActivationFactory
Класс AgileEventSource
Статья • 03.04.2023
Синтаксис
C++
template<
typename TDelegateInterface,
typename TEventSourceOptions =
Microsoft::WRL::InvokeModeOptions<FireAll>
>
class AgileEventSource :
public Microsoft::WRL::EventSource<
TDelegateInterface, TEventSourceOptions>;
Параметры
TDelegateInterface
TEventSourceOptions
Комментарии
Подавляющее большинство компонентов в среда выполнения Windows являются
гибкими компонентами. Дополнительные сведения см. в разделе Потоки и
маршалинг (C++/CX).
Иерархия наследования
EventSource
AgileEventSource
Требования
Заголовок: event.h
Элементы
Открытые методы
name Описание
Метод AgileEventSource::Add
Добавляет обработчик событий, представленный указанным интерфейсом
делегата, к набору обработчиков событий для текущего объекта EventSource .
Синтаксис
C++
HRESULT Add(
);
Параметры
delegateInterface
token
Синтаксис
C++
template<typename T>
HRESULT AsWeak(
_In_ T* p,
);
Параметры
T
Экземпляр типа .
pWeak
Возвращаемое значение
S_OK, если эта операция выполнена успешно; в противном случае — ошибка
HRESULT, указывающая причину сбоя.
Требования
Заголовок: client.h
Синтаксис
C++
template <
typename TComplete,
>
public Microsoft::WRL::Implements<IAsyncInfo>;
Параметры
TComplete
TProgress
resultType
Члены
Открытые конструкторы
name Описание
name Описание
Защищенные методы
Имя Описание
Иерархия наследования
AsyncBase
AsyncBase
Требования
Заголовок: async.h
AsyncBase::AsyncBase
Инициализирует экземпляр класса AsyncBase .
C++
AsyncBase();
AsyncBase::Cancel
Отменяет асинхронную операцию.
C++
STDMETHOD(
Cancel
)(void);
Возвращаемое значение
По умолчанию всегда возвращает S_OK.
Комментарии
Cancel() является реализацией IAsyncInfo::Cancel по умолчанию и не выполняет
AsyncBase::CheckValidStateForDelegateCall
Проверяет, можно ли изменить свойства делегата в текущем асинхронном
состоянии.
C++
Возвращаемое значение
S_OK, можно ли изменить свойства делегата; в противном случае
E_ILLEGAL_METHOD_CALL.
AsyncBase::CheckValidStateForResultsCall
Проверяет, можно ли собирать результаты асинхронной операции в текущем
асинхронном состоянии.
C++
inline HRESULT CheckValidStateForResultsCall();
Возвращаемое значение
S_OK, можно ли собирать результаты; в противном случае
E_ILLEGAL_METHOD_CALLE_ILLEGAL_METHOD_CALL.
AsyncBase::Close
Закрывает асинхронную операцию.
C++
STDMETHOD(
Close
)(void) override;
Возвращаемое значение
S_OK, если операция закрывается или уже закрыта; в противном случае
E_ILLEGAL_STATE_CHANGE.
Комментарии
Close() является реализацией IAsyncInfo::Close по умолчанию и не выполняет
фактических действий. Чтобы фактически закрыть асинхронную операцию,
переопределите чистый OnClose() виртуальный метод.
AsyncBase::ContinueAsyncOperation
Определяет, должна ли асинхронная операция продолжать обработку или должна
быть остановлена.
C++
Возвращаемое значение
true Значение , если текущее состояние асинхронной операции запущено, что
AsyncBase::CurrentStatus
Извлекает состояние текущей асинхронной операции.
C++
Details::AsyncStatusInternal *status
);
Параметры
status
Комментарии
Данная операция является потокобезопасной.
AsyncBase::ErrorCode
Извлекает код ошибки для текущей асинхронной операции.
C++
HRESULT *error
);
Параметры
error
Комментарии
Данная операция является потокобезопасной.
AsyncBase::FireCompletion
Вызывает обработчик событий завершения или сбрасывает внутренний делегат
хода выполнения.
C++
void FireCompletion(
void
) override;
Комментарии
Первая версия сбрасывает внутреннюю переменную делегата FireCompletion()
хода выполнения. Вторая версия вызывает обработчик событий завершения, если
асинхронная операция завершена.
AsyncBase::FireProgress
Вызывает текущий обработчик событий процесса выполнения.
C++
void FireProgress(
);
Параметры
Arg
Комментарии
ProgressTraits является производным от структуры ArgTraitsHelper.
AsyncBase::get_ErrorCode
Извлекает код ошибки для текущей асинхронной операции.
C++
STDMETHOD(
get_ErrorCode
Параметры
errorCode
Возвращаемое значение
S_OK в случае успешного выполнения; В противном случае
E_ILLEGAL_METHOD_CALL, если текущая асинхронная операция закрыта.
AsyncBase::get_Id
Извлекает дескриптор асинхронной операции.
C++
STDMETHOD(
get_Id
Параметры
идентификатор
Возвращаемое значение
S_OK в случае успешного выполнения; в противном случае
E_ILLEGAL_METHOD_CALL.
Комментарии
Этот метод реализует IAsyncInfo::get_Id .
AsyncBase::get_Status
Извлекает значение, указывающее состояние асинхронной операции.
C++
STDMETHOD(
get_Status
Параметры
status
Возвращаемое значение
S_OK в случае успешного выполнения; в противном случае
E_ILLEGAL_METHOD_CALL.
Комментарии
Этот метод реализует IAsyncInfo::get_Status .
AsyncBase::GetOnComplete
Копирует адрес текущего обработчика событий завершения в указанную
переменную.
C++
STDMETHOD(
GetOnComplete
)(TComplete** completeHandler);
Параметры
completeHandler
Возвращаемое значение
S_OK в случае успешного выполнения; в противном случае
E_ILLEGAL_METHOD_CALL.
AsyncBase::GetOnProgress
Копирует адрес текущего обработчика событий процесса выполнения в указанную
переменную.
C++
STDMETHOD(
GetOnProgress
)(TProgress** progressHandler);
Параметры
progressHandler
Возвращаемое значение
S_OK в случае успешного выполнения; в противном случае
E_ILLEGAL_METHOD_CALL.
AsyncBase::OnCancel
При переопределении в производном классе отменяет асинхронную операцию.
C++
void
) = 0;
AsyncBase::OnClose
При переопределении в производном классе закрывает асинхронную операцию.
C++
void
) = 0;
AsyncBase::OnStart
При переопределении в производном классе запускает асинхронную операцию.
C++
void
) = 0;
AsyncBase::p ut_Id
Задает дескриптор асинхронной операции.
C++
STDMETHOD(
put_Id
Параметры
идентификатор
Ненулевой дескриптор.
Возвращаемое значение
S_OK в случае успешного выполнения; в противном случае E_INVALIDARG или
E_ILLEGAL_METHOD_CALL.
AsyncBase::P utOnComplete
Задает для адреса обработчика событий завершения указанное значение.
C++
STDMETHOD(
PutOnComplete
)(TComplete* completeHandler);
Параметры
completeHandler
Возвращаемое значение
S_OK в случае успешного выполнения; в противном случае
E_ILLEGAL_METHOD_CALL.
AsyncBase::P utOnProgress
Задает заданное значение для обработчика событий хода выполнения.
C++
STDMETHOD(
PutOnProgress
)(TProgress* progressHandler);
Параметры
progressHandler
Возвращаемое значение
S_OK в случае успешного выполнения; в противном случае
E_ILLEGAL_METHOD_CALL.
AsyncBase::Start
Запускает асинхронную операцию.
C++
STDMETHOD(
Start
)(void);
Возвращаемое значение
S_OK, если операция запущена или уже запущена; в противном случае
E_ILLEGAL_STATE_CHANGE.
Комментарии
Start() — это защищенный метод, который не отображается извне, так как
AsyncBase::TryTransitionToCompleted
Указывает, завершена ли текущая асинхронная операция.
C++
bool TryTransitionToCompleted(
void
);
Возвращаемое значение
true Значение , если асинхронная операция завершена; в противном случае —
false .
AsyncBase::TryTransitionToError
Указывает, может ли указанный код ошибки изменить внутреннее состояние
ошибки.
C++
bool TryTransitionToError(
);
Параметры
error
Ошибка HRESULT.
Возвращаемое значение
true Значение , если внутреннее состояние ошибки было изменено; в противном
случае — false .
Комментарии
Эта операция изменяет состояние ошибки только в том случае, если для состояния
ошибки уже задано значение S_OK. Эта операция не оказывает влияния, если
состояние ошибки уже является ошибкой, отменено, завершено или закрыто.
AsyncResultType - перечисление
Статья • 03.04.2023
Синтаксис
C++
enum AsyncResultType;
Участники
Значения
Имя Описание
Требования
Заголовок: async.h
Синтаксис
C++
template<
typename TDelegateInterface,
typename TCallback
>
ComPtr<TDelegateInterface> Callback(
TCallback callback
);
template<
typename TDelegateInterface,
typename TCallbackObject
>
ComPtr<TDelegateInterface> Callback(
);
template<
typename TDelegateInterface,
typename TCallbackObject,
typename TArg1
>
ComPtr<TDelegateInterface> Callback(
);
template<
typename TDelegateInterface,
typename TCallbackObject,
typename TArg1,
typename TArg2
>
ComPtr<TDelegateInterface> Callback(
TArg2)
);
template<
typename TDelegateInterface,
typename TCallbackObject,
typename TArg1,
typename TArg2,
typename TArg3
>
ComPtr<TDelegateInterface> Callback(
TArg2,
TArg3)
);
template<
typename TDelegateInterface,
typename TCallbackObject,
typename TArg1,
typename TArg2,
typename TArg3,
typename TArg4
>
ComPtr<TDelegateInterface> Callback(
TArg2,
TArg3,
TArg4)
);
template<
typename TDelegateInterface,
typename TCallbackObject,
typename TArg1,
typename TArg2,
typename TArg3,
typename TArg4,
typename TArg5
>
ComPtr<TDelegateInterface> Callback(
TArg2,
TArg3,
TArg4,
TArg5)
);
template<
typename TDelegateInterface,
typename TCallbackObject,
typename TArg1,
typename TArg2,
typename TArg3,
typename TArg4,
typename TArg5,
typename TArg6
>
ComPtr<TDelegateInterface> Callback(
TArg2,
TArg3,
TArg4,
TArg5,
TArg6)
);
template<
typename TDelegateInterface,
typename TCallbackObject,
typename TArg1,
typename TArg2,
typename TArg3,
typename TArg4,
typename TArg5,
typename TArg6,
typename TArg7
>
ComPtr<TDelegateInterface> Callback(
TArg2,
TArg3,
TArg4,
TArg5,
TArg6,
TArg7)
);
template<
typename TDelegateInterface,
typename TCallbackObject,
typename TArg1,
typename TArg2,
typename TArg3,
typename TArg4,
typename TArg5,
typename TArg6,
typename TArg7,
typename TArg8
>
ComPtr<TDelegateInterface> Callback(
TArg2,
TArg3,
TArg4,
TArg5,
TArg6,
TArg7,
TArg8)
);
template<
typename TDelegateInterface,
typename TCallbackObject,
typename TArg1,
typename TArg2,
typename TArg3,
typename TArg4,
typename TArg5,
typename TArg6,
typename TArg7,
typename TArg8,
typename TArg9
>
ComPtr<TDelegateInterface> Callback(
TArg2,
TArg3,
TArg4,
TArg5,
TArg6,
TArg7,
TArg8,
TArg9)
);
Параметры
TDelegateInterface
TCallback
TCallbackObject
TArg1
TArg2
TArg3
TArg4
TArg5
TArg6
TArg7
TArg8
TArg9
Обратного вызова
object
method
Возвращаемое значение
Объект, функция-член которого является методом обратного вызова.
Комментарии
Основанием объекта делегата должно быть IUnknown , а не IInspectable .
Требования
Заголовок: event.h
Пространство имен: Microsoft::WRL
Синтаксис
C++
enum CancelTransitionPolicy;
Участники
Значения
Имя Описание
Требования
Заголовок: async.h
Синтаксис
C++
template <
typename I0,
typename I1,
typename I2 = Details::Nil,
typename I3 = Details::Nil,
typename I4 = Details::Nil,
typename I5 = Details::Nil,
typename I6 = Details::Nil,
typename I7 = Details::Nil,
typename I8 = Details::Nil,
typename I9 = Details::Nil
>
template <
typename DerivedType,
typename BaseType,
bool hasImplements,
typename I1,
typename I2,
typename I3,
typename I4,
typename I5,
typename I6,
typename I7,
typename I8,
typename I9
>
struct ChainInterfaces<
MixIn<
DerivedType,
BaseType,
hasImplements
>;
Параметры
I0
I1
I2
I3
I4
I5
I6
I7
I8
I9
Производный тип
Производный тип.
BaseType
hasImplements
Элементы
Защищенные методы
Имя Описание
Защищенные константы
Имя Описание
Иерархия наследования
I0
ChainInterfaces
Требования
Заголовок: implements.h
ChainInterfaces::CanCastTo
Указывает, можно ли привести указанный идентификатор интерфейса к каждой
специализации, определенной параметрами шаблона, не заданными по
умолчанию.
C++
__forceinline bool CanCastTo(
REFIID riid,
);
Параметры
riid
Идентификатор интерфейса.
Ppv
Возвращаемое значение
true значение , если все операции приведения выполнены успешно; в противном
случае — false .
ChainInterfaces::CastToUnknown
Приводит указатель интерфейса типа, определенного параметром шаблона I0 , к
указателю на IUnknown .
C++
Возвращаемое значение
Указатель на объект IUnknown .
ChainInterfaces::FillArrayWithIid
Сохраняет идентификатор интерфейса, определенный параметром шаблона I0 , в
указанном расположении в указанном массиве идентификаторов интерфейсов.
C++
);
Параметры
index
iids
ChainInterfaces::IidCount
Общее количество идентификаторов интерфейсов, содержащихся в интерфейсах,
указанных параметрами шаблона от I0 до I9.
C++
Возвращаемое значение
Общее количество идентификаторов интерфейсов.
Комментарии
Параметры шаблона I0 и I1 являются обязательными, а параметры от I2 до I9
являются необязательными. Число IID каждого интерфейса обычно равно 1.
ChainInterfaces::Verify
Проверяет, наследуется ли каждый интерфейс, определенный параметрами
шаблона от I0 до I9 , от IUnknown и (или) IInspectable и что I0 наследует от I1 до I9.
C++
Комментарии
Если операция проверки завершается ошибкой, static_assert выдает сообщение
об ошибке с описанием причины.
Синтаксис
C++
template <
typename I0 = Details::Nil,
typename I1 = Details::Nil,
typename I2 = Details::Nil
>
class ClassFactory :
public Details::RuntimeClass<
typename Details::InterfaceListHelper<
IClassFactory,
I0,
I1,
I2,
Details::Nil
>::TypeT,
RuntimeClassFlags<ClassicCom | InhibitWeakReference>,
false
>;
Параметры
I0
Нулевой интерфейс.
I1
Первый интерфейс.
I2
Второй интерфейс.
Комментарии
Используйте ClassFactory для предоставления пользовательской реализации
фабрики.
В следующем шаблоне программирования показано, как использовать структуру
Implements для указания более трех интерфейсов в фабрике классов.
Члены
Открытые конструкторы
name Описание
ClassFactory::ClassFactory
Открытые методы
name Описание
Иерархия наследования
I0
ChainInterfaces
I0
RuntimeClassBase
ImplementsHelper
DontUseNewUseMake
RuntimeClassFlags
RuntimeClassBaseT
RuntimeClass
ClassFactory
Требования
Заголовок: module.h
ClassFactory::AddRef
Увеличивает количество ссылок для текущего ClassFactory объекта.
C++
STDMETHOD_(
ULONG,
AddRef
)();
Возвращаемое значение
Значение S_OK, если операция завершилась успешно; в противном случае —
значение HRESULT, описывающее тип сбоя.
ClassFactory::ClassFactory
C++
WRL_NOTHROW ClassFactory();
ClassFactory::LockServer
Увеличивает или уменьшает количество базовых объектов, отслеживаемых
текущим ClassFactory объектом.
C++
STDMETHOD(
LockServer
)(BOOL fLock);
Параметры
Стадо
Возвращаемое значение
Значение S_OK, если операция завершилась успешно; в противном случае —
значение E_FAIL.
Комментарии
ClassFactory отслеживает объекты в базовом экземпляре класса Module .
ClassFactory::QueryInterface
Извлекает указатель на интерфейс, заданный параметром .
C++
STDMETHOD(
QueryInterface
Параметры
riid
Идентификатор интерфейса.
ppvObject
Возвращаемое значение
Значение S_OK, если операция завершилась успешно; в противном случае —
значение HRESULT, описывающее тип сбоя.
ClassFactory::Release
Уменьшает количество ссылок для текущего ClassFactory объекта.
C++
STDMETHOD_(
ULONG,
Release
)();
Возвращаемое значение
Значение S_OK, если операция завершилась успешно; в противном случае —
значение HRESULT, описывающее тип сбоя.
CloakedIid - структура
Статья • 03.04.2023
Синтаксис
C++
template<typename T>
struct CloakedIid : T;
Параметры
Комментарии
Ниже приведен пример использования CloakedIid : struct MyRuntimeClass :
RuntimeClass<CloakedIid<IMyCloakedInterface>> {} .
Иерархия наследования
T
CloakedIid
Требования
Заголовок: implements.h
Синтаксис
C++
class ComposableBase;
Параметры
FactoryInterface
Требования
Заголовок: implements.h
Синтаксис
C++
class ComPtr;
template<class U>
Параметры
T
Класс, которому является текущий ComPtr друг. (Шаблон, который использует этот
параметр, защищен.)
Remarks
ComPtr<> объявляет тип, представляющий базовый указатель интерфейса.
Используется для ComPtr<> объявления переменной, а затем с помощью оператора
доступа к члену со стрелкой ( -> ) для доступа к функции-члену интерфейса.
Элементы
Общедоступные определения типов
Имя Описание
Открытые конструкторы
name Описание
Открытые методы
name Описание
Защищенные методы
Имя Описание
Открытые операторы
Имя Описание
Имя Описание
Иерархия наследования
ComPtr
Требования
Заголовка: client.h
ComPtr::~ComPtr
Деинициализирует экземпляр ComPtr .
C++
WRL_NOTHROW ~ComPtr();
ComPtr::As
ComPtr Возвращает объект, представляющий интерфейс, определенный указанным
параметром шаблона.
C++
template<typename U>
HRESULT As(
_Out_ ComPtr<U>* p
) const;
template<typename U>
HRESULT As(
_Out_ Details::ComPtrRef<ComPtr<U>> p
) const;
Параметры
U
Возвращаемое значение
S_OK в случае успешного выполнения; в противном случае — значение HRESULT ,
указывающее на ошибку.
ComPtr::AsIID
ComPtr Возвращает объект, представляющий интерфейс, определенный указанным
идентификатором интерфейса.
C++
REFIID riid,
_Out_ ComPtr<IUnknown>* p
) const;
Параметры
riid
Идентификатор интерфейса.
Возвращаемое значение
S_OK в случае успешного выполнения; в противном случае — значение HRESULT ,
указывающее на ошибку.
ComPtr::AsWeak
Извлекает слабую ссылку на текущий объект.
C++
HRESULT AsWeak(
);
Параметры
pWeakRef
Возвращаемое значение
Значение S_OK, если операция завершилась успешно; в противном случае —
значение HRESULT, указывающее на ошибку.
ComPtr::Attach
Связывает это ComPtr с типом интерфейса, заданным текущим параметром типа
шаблона.
C++
void Attach(
);
Параметры
other
Тип интерфейса.
ComPtr::ComPtr
Инициализирует новый экземпляр класса ComPtr . Перегрузки предоставляют
конструкторы по умолчанию, конструкторы копирования, перемещения и
преобразования.
C++
WRL_NOTHROW ComPtr();
WRL_NOTHROW ComPtr(
decltype(__nullptr)
);
template<class U>
WRL_NOTHROW ComPtr(
_In_opt_ U *other
);
WRL_NOTHROW ComPtr(
);
template<class U>
WRL_NOTHROW ComPtr(
);
WRL_NOTHROW ComPtr(
);
template<class U>
WRL_NOTHROW ComPtr(
);
Параметры
U
other
Объект типа U .
Возвращаемое значение
Remarks
Первый конструктор — это конструктор по умолчанию, который неявно создает
пустой объект. Второй конструктор указывает __nullptr, что явно создает пустой
объект.
Третий конструктор создает объект из объекта, указанного указателем. Теперь
ComPtr он владеет памятью с указанием на память и поддерживает счетчик ссылок.
ComPtr::CopyTo
Копирует текущий или указанный интерфейс, связанный с этим ComPtr , в
указанный указатель.
C++
HRESULT CopyTo(
);
HRESULT CopyTo(
REFIID riid,
) const;
template<typename U>
HRESULT CopyTo(
) const;
Параметры
U
Имя типа.
ptr
riid
Идентификатор интерфейса.
Возвращаемое значение
S_OK в случае успешного выполнения; в HRESULT противном случае значение,
Remarks
Первая функция возвращает копию указателя на интерфейс, связанный с этим
ComPtr . Эта функция всегда возвращает . S_OK
ComPtr::Detach
Отменяет связь этого объекта ComPtr с интерфейсом, который он представляет.
C++
T* Detach();
Возвращаемое значение
Указатель на интерфейс, который был представлен этим объектом ComPtr .
ComPtr::Get
Извлекает указатель на интерфейс, связанный с этим ComPtr .
C++
T* Get() const;
Возвращаемое значение
Указатель на интерфейс, связанный с этим ComPtr .
ComPtr::GetAddressOf
Извлекает адрес ptr_ элемента данных, который содержит указатель на интерфейс,
представленный этим ComPtr элементом.
C++
T** GetAddressOf();
Возвращаемое значение
Адрес переменной.
ComPtr::InternalAddRef
Увеличивает число ссылок интерфейса, связанного с этим ComPtr .
C++
Remarks
Этот метод защищен.
ComPtr::InternalRelease
Выполняет операцию выпуска COM в интерфейсе, связанном с этим ComPtr .
C++
Remarks
Этот метод защищен.
ComPtr::operator&
Освобождает интерфейс, связанный с этим объектом ComPtr , а затем извлекает
адрес объекта ComPtr .
C++
Details::ComPtrRef<WeakRef> operator&()
Возвращаемое значение
Слабая ссылка на текущий объект ComPtr .
Remarks
Этот метод отличается от ComPtr::GetAddressOf того, что этот метод освобождает
ссылку на указатель интерфейса. Используется ComPtr::GetAddressOf , если
требуется адрес указателя интерфейса, но не требуется освобождать этот
интерфейс.
ComPtr::operator->
Извлекает указатель на тип, заданный текущим параметром шаблона.
C++
WRL_NOTHROW Microsoft::WRL::Details::RemoveIUnknown<InterfaceType>*
operator->() const;
Возвращаемое значение
Указатель на тип, заданный текущим именем типа шаблона.
Remarks
Эта вспомогательная функция удаляет лишнюю нагрузку, вызванную
использованием макроса STDMETHOD. Эта функция делает IUnknown типы private
вместо virtual .
ComPtr::operator=
Присваивает значение текущему ComPtr .
C++
decltype(__nullptr)
);
_In_opt_ T *other
);
_In_opt_ U *other
);
);
template<class U>
);
);
template<class U>
);
Параметры
U
Класс.
other
Возвращаемое значение
Ссылка на текущий ComPtr .
Remarks
Первая версия этого оператора присваивает текущему ComPtr значению пустое
значение.
ComPtr::operator==
Определение равенства двух объектов ComPtr .
C++
bool operator==(
const ComPtr<T>& a,
const ComPtr<U>& b
);
bool operator==(
const ComPtr<T>& a,
decltype(__nullptr)
);
bool operator==(
decltype(__nullptr),
const ComPtr<T>& a
);
Параметры
a
Возвращаемое значение
Первый оператор возвращает true значение, если объект равен объекту a ; b в
противном случае false .
Второй и третий операторы дают значение true , если объект a равен nullptr ; в
противном случае false .
ComPtr::operator!=
Указывает, не равны ли два ComPtr объекта.
C++
bool operator!=(
const ComPtr<T>& a,
const ComPtr<U>& b
);
bool operator!=(
const ComPtr<T>& a,
decltype(__nullptr)
);
bool operator!=(
decltype(__nullptr),
const ComPtr<T>& a
);
Параметры
a
Второй и третий операторы дают значение true , если объект a не равен nullptr ;
в противном случае false .
ComPtr::operator
Microsoft::WRL::Details::BoolType
Указывает, управляет ли ComPtr объект временем существования интерфейса.
C++
Возвращаемое значение
Если с этим ComPtr связан интерфейс, адрес BoolStruct::Member элемента данных; в
противном случае nullptr .
ComPtr::ptr_
Содержит указатель на интерфейс, связанный с этим, и управляется этим ComPtr .
C++
InterfaceType *ptr_;
Remarks
ptr_ является внутренним, защищенным элементом данных.
ComPtr::ReleaseAndGetAddressOf
Освобождает интерфейс, связанный с этим ComPtr , а затем извлекает адрес ptr_
члена данных, который содержит указатель на выпущенный интерфейс.
C++
T** ReleaseAndGetAddressOf();
Возвращаемое значение
Адрес ptr_ элемента данных этого ComPtr элемента.
ComPtr::Reset
Освобождает интерфейс, связанный с этим ComPtr , и возвращает новое число
ссылок.
C++
Возвращаемое значение
Количество ссылок, оставшихся в базовом интерфейсе, если таковые есть.
ComPtr::Swap
Обмен интерфейсом, управляемым текущим ComPtr , с интерфейсом, управляемым
указанным ComPtr .
C++
void Swap(
_Inout_ ComPtr&& r
);
void Swap(
_Inout_ ComPtr& r
);
Параметры
r
Объект ComPtr .
CreateActivationFactory - функция
Статья • 03.04.2023
Синтаксис
C++
template<typename Factory>
REFIID riid,
Параметры
flags
Запись
riid
ppFactory
Возвращаемое значение
Значение S_OK, если операция завершилась успешно; в противном случае —
значение HRESULT, указывающее на ошибку.
Комментарии
Ошибка утверждения возникает, если фабрика параметров шаблона не является
производным от интерфейса IActivationFactory .
Требования
Заголовок: module.h
Синтаксис
C++
template<typename Factory>
REFIID riid,
) throw();
Параметры
flags
Запись
riid
ppFactory
Возвращаемое значение
Значение S_OK, если операция завершилась успешно; в противном случае —
значение HRESULT, указывающее на ошибку.
Комментарии
Ошибка утверждения возникает, если фабрика параметров шаблона не является
производным от интерфейса IClassFactory .
Требования
Заголовок: module.h
Синтаксис
C++
Параметры
TEventArgsInterface
TEventArgsClass
Элементы
Открытые методы
name Описание
Комментарии
Экземпляры этого класса передаются в обработчики событий для отложенных
событий. Параметры шаблона представляют интерфейс, определяющий
подробные сведения об аргументах событий для конкретного типа отложенного
события, а также класс, реализующий этот интерфейс.
Класс отображается как первый аргумент обработчика событий для отложенного
события. Можно вызвать метод GetDeferral , чтобы получить объект Deferral, из
которого можно получить все сведения о отложенных событиях. После
завершения обработки событий необходимо вызвать завершение в объекте
«Задержка». Затем следует вызвать InvokeAllFinished в конце метода обработчика
событий, что гарантирует правильное завершение всех отложенных событий.
Требования
Заголовок: event.h
DeferrableEventArgs::GetDeferral
Возвращает ссылку на объект Deferral , представляющий отложенное событие.
C++
Параметры
result
Возвращаемое значение
Значение S_OK, если операция завершилась успешно; в противном случае —
значение HRESULT, указывающее на ошибку.
DeferrableEventArgs::InvokeAllFinished
Вызывается, чтобы указать, что вся обработка для отложенного события
завершена.
C++
void InvokeAllFinished()
Комментарии
Этот метод следует вызывать после вызова метода InvokeAll из источника события.
Вызов этого метода предотвращает ввод последующих задержек и вызывает
принудительное выполнение обработчика завершения, если задержки
отсутствовали.
EventSource - класс
Статья • 03.04.2023
Синтаксис
C++
template<typename TDelegateInterface>
class EventSource;
Параметры
TDelegateInterface
Члены
Открытые конструкторы
name Описание
Открытые методы
name Описание
Имя Описание
Иерархия наследования
EventSource
Требования
Заголовок: event.h
EventSource::Add
Добавляет обработчик событий, представленный указанным интерфейсом
делегата, к набору обработчиков событий для текущего EventSource объекта .
C++
HRESULT Add(
);
Параметры
delegateInterface
token
Возвращаемое значение
Значение S_OK, если операция завершилась успешно; в противном случае —
значение HRESULT, указывающее на ошибку.
EventSource::addRemoveLock_
Синхронизирует доступ к массиву targets_ при добавлении, удалении или вызове
обработчиков событий.
C++
Wrappers::SRWLock addRemoveLock_;
EventSource::EventSource
Инициализирует новый экземпляр класса EventSource .
C++
EventSource();
EventSource::GetSize
Извлекает количество обработчиков событий, связанных с текущим EventSource
объектом .
C++
EventSource::InvokeAll
Вызывает каждый обработчик событий, связанный с текущим EventSource
объектом, используя указанные типы и аргументы.
C++
void InvokeAll();
template <
typename T0
>
void InvokeAll(
T0arg0
);
template <
typename T0,
typename T1
>
void InvokeAll(
T0arg0,
T1arg1
);
template <
typename T0,
typename T1,
typename T2
>
void InvokeAll(
T0arg0,
T1arg1,
T2arg2
);
template <
typename T0,
typename T1,
typename T2,
typename T3
>
void InvokeAll(
T0arg0,
T1arg1,
T2arg2,
T3arg3
);
template <
typename T0,
typename T1,
typename T2,
typename T3,
typename T4
>
void InvokeAll(
T0arg0,
T1arg1,
T2arg2,
T3arg3,
T4arg4
);
template <
typename T0,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5
>
void InvokeAll(
T0arg0,
T1arg1,
T2arg2,
T3arg3,
T4arg4,
T5arg5
);
template <
typename T0,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6
>
void InvokeAll(
T0arg0,
T1arg1,
T2arg2,
T3arg3,
T4arg4,
T5arg5,
T6arg6
);
template <
typename T0,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7
>
void InvokeAll(
T0arg0,
T1arg1,
T2arg2,
T3arg3,
T4arg4,
T5arg5,
T6arg6,
T7arg7
);
template <
typename T0,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8
>
void InvokeAll(
T0arg0,
T1arg1,
T2arg2,
T3arg3,
T4arg4,
T5arg5,
T6arg6,
T7arg7,
T8arg8
);
template <
typename T0,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8,
typename T9
>
void InvokeAll(
T0arg0,
T1arg1,
T2arg2,
T3arg3,
T4arg4,
T5arg5,
T6arg6,
T7arg7,
T8arg8,
T9arg9
);
Параметры
T0
T1
T2
T3
T4
T5
T6
T7
T8
T9
arg0
arg1
arg2
arg4
arg5
arg6
arg7
arg8
arg9
EventSource::Remove
Удаляет обработчик событий, представленный указанным маркером регистрации
события, из набора обработчиков событий, связанных с текущим EventSource
объектом.
C++
HRESULT Remove(
EventRegistrationToken token
);
Параметры
token
Возвращаемое значение
Значение S_OK, если операция завершилась успешно; в противном случае —
значение HRESULT, указывающее на ошибку.
Комментарии
Дополнительные сведения о EventRegistrationToken структуре см. в разделе
Структура Windows::Foundation::EventRegistrationToken справочной документации
по среда выполнения Windows.
EventSource::targets_
Массив из одного или нескольких обработчиков событий.
C++
ComPtr<Details::EventTargetArray> targets_;
Комментарии
При возникновении события, представленного текущим EventSource объектом,
вызываются обработчики событий.
EventSource::targetsPointerLock_
Синхронизирует доступ к внутренним элементам данных даже при добавлении,
удалении или вызове обработчиков событий для этого EventSource .
C++
Wrappers::SRWLock targetsPointerLock_;
Перечисление FactoryCacheFlags
Статья • 03.04.2023
Синтаксис
C++
enum FactoryCacheFlags;
Remarks
По умолчанию при создании объекта ModuleType политика кэширования фабрики
указывается как параметр шаблона ModuleType. Чтобы переопределить эту
политику, укажите значение FactoryCacheFlags при создании объекта фабрики.
Политика Описание
Требования
Заголовок: implements.h
Синтаксис
C++
class FtmBase :
public Microsoft::WRL::Implements<
Microsoft::WRL::RuntimeClassFlags<WinRtClassicComMix>,
Microsoft::WRL::CloakedIid<IMarshal>
>;
Remarks
Дополнительные сведения см. в разделе Класс RuntimeClass.
Члены
Открытые конструкторы
name Описание
Открытые методы
name Описание
Имя Описание
Иерархия наследования
FtmBase
Требования
Заголовок: ftm.h
FtmBase::CreateGlobalInterfaceTable
Создает таблицу глобального интерфейса (GIT).
C++
);
Параметры
git
Возвращаемое значение
Значение S_OK, если операция завершилась успешно; в противном случае —
значение HRESULT, указывающее на ошибку.
Комментарии
Для получения дополнительной информации см. IGlobalInterfaceTable.
FtmBase::D isconnectObject
Принудительно освобождает все внешние подключения к объекту. Сервер объекта
вызывает реализацию этого метода объекта перед завершением работы.
C++
STDMETHODIMP DisconnectObject(
) override;
Параметры
DwReserved
Возвращаемое значение
Значение S_OK, если операция завершилась успешно; в противном случае —
значение HRESULT, указывающее на ошибку.
FtmBase::FtmBase
Инициализирует новый экземпляр класса FtmBase .
C++
FtmBase();
FtmBase::GetMarshalSizeMax
Получение верхней границы количества байтов, необходимого для
маршалирования указанного указателя интерфейса на указанный объект.
C++
STDMETHODIMP GetMarshalSizeMax(
) override;
Параметры
riid
Pv
dwDestContext
pvDestContext
mshlflags
pSize
Возвращаемое значение
S_OK в случае успешного выполнения; в противном случае E_FAIL или
E_NOINTERFACE.
FtmBase::GetUnmarshalClass
Возвращает идентификатор CLSID, который COM использует для поиска
библиотеки DLL, содержащей код для соответствующего прокси-сервера. COM
загружает эту библиотеку DLL для создания неинициализированного экземпляра
прокси-сервера.
C++
STDMETHODIMP GetUnmarshalClass(
) override;
Параметры
riid
Pv
dwDestContext
pvDestContext
mshlflags
pCid
Возвращаемое значение
S_OK в случае успешного выполнения; в противном случае S_FALSE.
FtmBase::MarshalInterface
Записывает в поток данные, необходимые для инициализации прокси-объекта в
некотором клиентском процессе.
C++
STDMETHODIMP MarshalInterface(
) override;
Параметры
pStm
riid
Pv
dwDestContext
pvDestContext
mshlflags
Возвращаемое значение
S_OK. Указатель интерфейса успешно маршалирован.
FtmBase::marshaller_
Содержит ссылку на свободнопоточный маршалер.
C++
Microsoft::WRL::ComPtr<IMarshal> marshaller_; ;
FtmBase::ReleaseMarshalData
Уничтожает маршалированные пакеты данных.
C++
STDMETHODIMP ReleaseMarshalData(
) override;
Параметры
pStm
Возвращаемое значение
Значение S_OK, если операция завершилась успешно; в противном случае —
значение HRESULT, указывающее на ошибку.
FtmBase::UnmarshalInterface
Инициализирует созданный прокси-сервер и возвращает указатель интерфейса на
этот прокси-сервер.
C++
STDMETHODIMP UnmarshalInterface(
) override;
Параметры
pStm
riid
Ppv
Возвращаемое значение
S_OK в случае успешного выполнения; в противном случае E_NOINTERFACE или
E_FAIL.
Функция GetModuleBase
Статья • 03.04.2023
Синтаксис
C++
Возвращаемое значение
Указатель на объект ModuleBase .
Комментарии
Эта внутренняя функция используется для увеличения и уменьшения числа ссылок
объекта.
Требования
Заголовок: implements.h
Синтаксис
C++
template <
typename I0,
typename I1 = Details::Nil,
typename I2 = Details::Nil,
typename I3 = Details::Nil,
typename I4 = Details::Nil,
typename I5 = Details::Nil,
typename I6 = Details::Nil,
typename I7 = Details::Nil,
typename I8 = Details::Nil,
typename I9 = Details::Nil
>
Details::ImplementsHelper<
RuntimeClassFlags<WinRt>,
typename Details::InterfaceListHelper<
>::TypeT
>,
Details::ImplementsBase;
template <
int flags,
typename I0,
typename I1,
typename I2,
typename I3,
typename I4,
typename I5,
typename I6,
typename I7,
typename I8
>
RuntimeClassFlags<flags>,
I0, I1, I2, I3, I4, I5, I6, I7, I8> :
Details::ImplementsHelper<
RuntimeClassFlags<flags>,
typename Details::InterfaceListHelper<
>::TypeT
>,
Details::ImplementsBase;
Параметры
I0
I1
I2
I3
I4
I5
I6
I7
I8
I9
flags
Комментарии
Наследуется от списка указанных интерфейсов и реализует вспомогательные
шаблоны для QueryInterface и GetIid .
Каждый параметр интерфейса I0 – I9 должен быть производным от IUnknown ,
IInspectable или от шаблона ChainInterfaces . Параметр flags определяет, создается
ли поддержка для IUnknown или IInspectable .
Элементы
Имя Описание
Защищенные методы
Имя Описание
Защищенные константы
Имя Описание
Иерархия наследования
I0
ChainInterfaces
I0
ImplementsBase
ImplementsHelper
Implements
Требования
Заголовок: implements.h
Реализует::CanCastTo
Возвращает указатель на указанный интерфейс.
C++
REFIID riid,
);
Параметры
riid
Ppv
Возвращаемое значение
S_OK в случае успешного выполнения; в противном случае — HRESULT,
указывающее на ошибку, например E_NOINTERFACE.
Комментарии
Это внутренняя вспомогающая функция, которая выполняет операцию
QueryInterface.
Реализует::CastToUnknown
Возвращает указатель на базовый IUnknown интерфейс.
C++
Возвращаемое значение
Эта операция всегда выполняется успешно и возвращает IUnknown указатель.
Комментарии
Внутренняя вспомогательная функция.
Реализует::FillArrayWithIid
Вставляет идентификатор интерфейса, заданный текущим параметром нулевого
шаблона, в указанный элемент массива.
C++
);
Параметры
index
iids
Комментарии
Внутренняя вспомогательная функция.
Реализует::IidCount
Содержит количество идентификаторов реализованных интерфейсов.
C++
Макрос InspectableClass
Статья • 03.04.2023
Синтаксис
C++
InspectableClass(
runtimeClassName,
trustLevel)
Параметры
runtimeClassName
trustLevel
Комментарии
Макрос InspectableClass можно использовать только с среда выполнения Windows
типами.
Требования
Заголовок: implements.h
Синтаксис
C++
enum InvokeMode
StopOnFirstError = 1,
FireAll = 2,
};
struct InvokeModeOptions
Требования
Заголовок: event.h
Класс Microsoft::WRL::AgileEventSource
Функция Make
Статья • 03.04.2023
Синтаксис
C++
template <
typename T,
typename TArg1,
typename TArg2,
typename TArg3,
typename TArg4,
typename TArg5,
typename TArg6,
typename TArg7,
typename TArg8,
typename TArg9
>
ComPtr<T> Make(
TArg1 &&arg1,
TArg2 &&arg2,
TArg3 &&arg3,
TArg4 &&arg4,
TArg5 &&arg5,
TArg6 &&arg6,
TArg7 &&arg7,
TArg8 &&arg8,
TArg9 &&arg9
);
template <
typename T,
typename TArg1,
typename TArg2,
typename TArg3,
typename TArg4,
typename TArg5,
typename TArg6,
typename TArg7,
typename TArg8
>
ComPtr<T> Make(
TArg1 &&arg1,
TArg2 &&arg2,
TArg3 &&arg3,
TArg4 &&arg4,
TArg5 &&arg5,
TArg6 &&arg6,
TArg7 &&arg7,
TArg8 &&arg8
);
template <
typename T,
typename TArg1,
typename TArg2,
typename TArg3,
typename TArg4,
typename TArg5,
typename TArg6,
typename TArg7
>
ComPtr<T> Make(
TArg1 &&arg1,
TArg2 &&arg2,
TArg3 &&arg3,
TArg4 &&arg4,
TArg5 &&arg5,
TArg6 &&arg6,
TArg7 &&arg7
);
template <
typename T,
typename TArg1,
typename TArg2,
typename TArg3,
typename TArg4,
typename TArg5,
typename TArg6
>
ComPtr<T> Make(
TArg1 &&arg1,
TArg2 &&arg2,
TArg3 &&arg3,
TArg4 &&arg4,
TArg5 &&arg5,
TArg6 &&arg6
);
template <
typename T,
typename TArg1,
typename TArg2,
typename TArg3,
typename TArg4,
typename TArg5
>
ComPtr<T> Make(
TArg1 &&arg1,
TArg2 &&arg2,
TArg3 &&arg3,
TArg4 &&arg4,
TArg5 &&arg5
);
template <
typename T,
typename TArg1,
typename TArg2,
typename TArg3,
typename TArg4
>
ComPtr<T> Make(
TArg1 &&arg1,
TArg2 &&arg2,
TArg3 &&arg3,
TArg4 &&arg4
);
template <
typename T,
typename TArg1,
typename TArg2,
typename TArg3
>
ComPtr<T> Make(
TArg1 &&arg1,
TArg2 &&arg2,
TArg3 &&arg3
);
template <
typename T,
typename TArg1,
typename TArg2
>
ComPtr<T> Make(
TArg1 &&arg1,
TArg2 &&arg2
);
template <
typename T,
typename TArg1
>
ComPtr<T> Make(
TArg1 &&arg1
);
template <
typename T
>
ComPtr<T> Make();
Параметры
T
TArg2
TArg3
TArg4
TArg5
TArg6
TArg7
TArg8
TArg9
arg1
arg2
arg3
arg4
arg5
arg6
arg8
arg9
Возвращаемое значение
Объект ComPtr<T> в случае успешного завершения операции; в противном
случае — значение nullptr .
Комментарии
Дополнительные сведения о различиях между этой функцией и Microsoft::WRL::D
etails::MakeAndInitialize см. в разделе Практическое руководство.
Требования
Заголовок: implements.h
Синтаксис
C++
template<
typename Derived,
typename MixInType,
>
struct MixIn;
Параметры
Производный
MixInType
Базовый тип.
hasImplements
Комментарии
Если класс является производным от среда выполнения Windows и COM-
интерфейсов класса, в списке объявлений классов сначала должны быть
перечислены все среда выполнения Windows интерфейсы, а затем все
классические COM-интерфейсы. MixIn гарантирует, что интерфейсы указаны в
правильном порядке.
Иерархия наследования
MixIn
Требования
Заголовок: implements.h
Синтаксис
C++
template<ModuleType moduleType>
class Module;
template<>
template<>
Параметры
moduleType
Элементы
Защищенные классы
Имя Описание
name Описание
Защищенные конструкторы
Имя Описание
Открытые методы
name Описание
Защищенные методы
Имя Описание
Имя Описание
Макросы
Имя Описание
Иерархия наследования
ModuleBase
Module
Module
Требования
Заголовок: module.h
Module::~Module
Деинициализирует текущий Module экземпляр класса .
C++
virtual ~Module();
Module::Create
Создает экземпляр модуля.
C++
template<typename T>
T callback
);
template<typename T>
_In_ T* object,
);
Параметры
T
Тип модуля.
Обратного вызова
object
method
Возвращаемое значение
Ссылка на модуль.
Module::D ecrementObjectCount
Уменьшает количество объектов, отслеживаемых модулем.
C++
Возвращаемое значение
Счетчик перед операцией уменьшения.
Module::GetActivationFactory
Получает фабрику активации для модуля.
C++
);
Параметры
pActivatibleClassId
ppIFactory
serverName
Возвращаемое значение
Значение S_OK, если операция завершилась успешно; в противном случае —
значение HRESULT, возвращаемое GetActivationFactory.
Module::GetClassObject
Извлекает кэш фабрик классов.
C++
HRESULT GetClassObject(
REFCLSID clsid,
REFIID riid,
);
Параметры
Clsid
Идентификатор класса.
riid
Ppv
serverName
Возвращаемое значение
Комментарии
Используйте этот метод только для COM, а не для среда выполнения Windows. Этот
метод предоставляет только IClassFactory методы.
Module::GetModule
Создает экземпляр модуля.
C++
Возвращаемое значение
Ссылка на модуль.
Module::GetObjectCount
Извлекает количество объектов, управляемых этим модулем.
C++
Возвращаемое значение
Текущее количество объектов, управляемых этим модулем.
Module::IncrementObjectCount
Увеличивает количество объектов, отслеживаемых модулем.
C++
Возвращаемое значение
Счетчик перед операцией приращения.
Module::Module
Инициализирует новый экземпляр класса Module .
C++
Module();
Комментарии
Этот конструктор является защищенным и не может быть вызван ключевым
словом new . Вместо этого вызовите Module::GetModule или Module::Create.
Module::objectCount_
Отслеживает количество классов, созданных с помощью функции Make .
C++
Module::RegisterCOMObject
Регистрирует один или несколько объектов модели COM, чтобы другие
приложения могли к ним подключиться.
C++
IID* clsids,
IClassFactory** factories,
DWORD* cookies,
Параметры
serverName
clsids
factories
Файлы cookie
count
Возвращаемое значение
Значение S_OK, если операция завершилась успешно; в противном случае —
значение HRESULT (например, CO_E_OBJISREG), указывающее причину неудачного
завершения операции.
Комментарии
COM-объекты зарегистрированы с помощью перечислителя CLSCTX_LOCAL_SERVER
перечисления CLSCTX.
C++
HRESULT RegisterObjects(
ModuleBase* module,
Параметры
Модуль
serverName
Возвращаемое значение
Значение S_OK, если операция завершилась успешно; в противном случае —
значение HRESULT, указывающее причину неудачного завершения операции.
Module::RegisterWinRTObject
Регистрирует один или несколько объектов среда выполнения Windows, чтобы к
ним могли подключаться другие приложения.
C++
wchar_t** activatableClassIds,
WINRT_REGISTRATION_COOKIE* cookie,
Параметры
serverName
Cookie
count
Возвращаемое значение
Значение S_OK, если операция завершилась успешно; в противном случае —
значение HRESULT (например, CO_E_OBJISREG), указывающее причину неудачного
завершения операции.
Module::releaseNotifier_
Содержит указатель на ReleaseNotifier объект .
C++
ReleaseNotifier *releaseNotifier_;
Module::Terminate
Приводит к завершению работы всех экземпляров фабрик, созданных модулем.
C++
void Terminate();
Комментарии
Освобождает фабрики в кэше.
Module::UnregisterCOMObject
Отменяет регистрацию одного или нескольких объектов модели COM, что
предотвращает подключение к ним других приложений.
C++
DWORD* cookies,
Параметры
serverName
(Не используется)
Файлы cookie
count
Возвращаемое значение
Значение S_OK, если операция завершилась успешно; в противном случае —
значение HRESULT, указывающее причину неудачного завершения операции.
Module::UnregisterObjects
Отменяет регистрацию объектов в указанном модуле. Таким образом другие
приложения не смогут подключиться к ним.
C++
HRESULT UnregisterObjects(
ModuleBase* module,
Параметры
Модуль
Указатель на модуль.
serverName
Возвращаемое значение
Значение S_OK, если операция завершилась успешно; в противном случае —
значение HRESULT, указывающее причину неудачного завершения операции.
Module::UnregisterWinRTObject
Отменяет регистрацию одного или нескольких объектов среда выполнения
Windows, чтобы другие приложения не подключались к ним.
C++
unsigned int,
);
Параметры
Cookie
Синтаксис
C++
template<typename T>
Параметры
T
Члены
Открытые конструкторы
name Описание
Открытые методы
name Описание
Имя Описание
GenericReleaseNotifier
Требования
Заголовок: module.h
Module::GenericReleaseNotifier::callback_
Содержит обработчик событий лямбда-выражения, функтора или указателя на функцию,
связанный с текущим Module::GenericReleaseNotifier объектом.
C++
T callback_;
Module::GenericReleaseNotifier::GenericReleaseNotifier
Инициализирует новый экземпляр класса Module::GenericReleaseNotifier .
C++
GenericReleaseNotifier(
T callback,
bool release
Параметры
Обратного вызова
Выпуска
Module::GenericReleaseNotifier::Invoke
Вызывает обработчик событий, связанный с текущим Module::GenericReleaseNotifier
объектом .
C++
void Invoke();
Класс Module::MethodReleaseNotifier
Статья • 03.04.2023
Синтаксис
C++
template<typename T>
Параметры
T
Члены
Открытые конструкторы
name Описание
Открытые методы
name Описание
Имя Описание
Иерархия наследования
ReleaseNotifier
MethodReleaseNotifier
Требования
Заголовок: module.h
Module::MethodReleaseNotifier::Invoke
Вызывает обработчик событий, связанный с текущим Module::MethodReleaseNotifier
объектом .
C++
void Invoke();
Module::MethodReleaseNotifier::method_
Содержит указатель на обработчик событий для текущего Module::MethodReleaseNotifier
объекта.
C++
Module::MethodReleaseNotifier::MethodReleaseNotifier
Инициализирует новый экземпляр класса Module::MethodReleaseNotifier .
C++
MethodReleaseNotifier(
_In_ T* object,
ReleaseNotifier(release), object_(object),
method_(method);
Параметры
object
method
Выпуска
Module::MethodReleaseNotifier::object_
Содержит указатель на объект, функция-член которого является обработчиком событий для
текущего Module::MethodReleaseNotifier объекта.
C++
T* object_;
Класс Module::ReleaseNotifier
Статья • 03.04.2023
Синтаксис
C++
class ReleaseNotifier;
Члены
Открытые конструкторы
name Описание
Открытые методы
name Описание
Иерархия наследования
ReleaseNotifier
Требования
Заголовок: module.h
Module::ReleaseNotifier::~ReleaseNotifier
Деинициализирует текущий Module::ReleaseNotifier экземпляр класса .
C++
Module::ReleaseNotifier::Invoke
При реализации вызывает обработчик событий при освобождении последнего
объекта в модуле.
C++
Module::ReleaseNotifier::Release
Удаляет текущий Module::ReleaseNotifier объект , если объект был создан с
параметром true .
C++
Module::ReleaseNotifier::ReleaseNotifier
Инициализирует новый экземпляр класса Module::ReleaseNotifier .
C++
Параметры
Выпуска
true Значение , чтобы удалить этот экземпляр при вызове Release метода; false
значение , чтобы не удалять этот экземпляр.
ModuleType - перечисление
Статья • 03.04.2023
Синтаксис
C++
enum ModuleType;
Участники
Значения
Имя Описание
Требования
Заголовок: module.h
Синтаксис
C++
const ComPtr<T>& a,
const ComPtr<U>& b
);
const ComPtr<T>& a,
decltype(__nullptr)
);
decltype(__nullptr),
const ComPtr<T>& a
);
const Details::ComPtrRef<ComPtr<T>>& a,
const Details::ComPtrRef<ComPtr<U>>& b
);
const Details::ComPtrRef<ComPtr<T>>& a,
decltype(__nullptr)
);
decltype(__nullptr),
const Details::ComPtrRef<ComPtr<T>>& a
);
const Details::ComPtrRef<ComPtr<T>>& a,
void* b
);
void* b,
const Details::ComPtrRef<ComPtr<T>>& a
);
Параметры
a
Левый объект.
b
Правый объект.
Возвращаемое значение
true , если объекты не равны, иначе false .
Требования
Заголовок: client.h
Синтаксис
C++
const ComPtr<T>& a,
const ComPtr<U>& b
);
const ComPtr<T>& a,
decltype(__nullptr)
);
decltype(__nullptr),
const ComPtr<T>& a
);
const Details::ComPtrRef<ComPtr<T>>& a,
const Details::ComPtrRef<ComPtr<U>>& b
);
const Details::ComPtrRef<ComPtr<T>>& a,
decltype(__nullptr)
);
decltype(__nullptr),
const Details::ComPtrRef<ComPtr<T>>& a
);
const Details::ComPtrRef<ComPtr<T>>& a,
void* b
);
void* b,
const Details::ComPtrRef<ComPtr<T>>& a
);
Параметры
a
Левый объект.
b
Правый объект.
Возвращаемое значение
Значение true , если объекты равны, в противном случае — значение false .
Требования
Заголовок: client.h
Синтаксис
C++
Параметры
a
Левый объект.
Правый объект.
Возвращаемое значение
true значение , если адрес меньше адреса b; в противном случае — false .
Требования
Заголовок: client.h
Синтаксис
C++
Параметры
classFlags
TInterfaces
Открытые конструкторы
name Описание
Открытые методы
name Описание
Иерархия наследования
Иерархия — это сведения о реализации.
Требования
Заголовок: implements.h
RuntimeClass::~RuntimeClass
Деинициализирует текущий RuntimeClass экземпляр класса.
C++
virtual ~RuntimeClass();
RuntimeClass::AddRef
Увеличивает число ссылок для текущего RuntimeClass объекта.
C++
STDMETHOD_(
ULONG,
AddRef
)();
Возвращаемое значение
S_OK в случае успешного выполнения; в противном случае — значение HRESULT ,
указывающее на ошибку.
RuntimeClass::DecrementReference
Уменьшает количество ссылок для текущего RuntimeClass объекта.
C++
ULONG DecrementReference();
Возвращаемое значение
S_OK в случае успешного выполнения; в противном случае — значение HRESULT ,
указывающее на ошибку.
RuntimeClass::GetIids
Возвращает массив, который может содержать идентификаторы интерфейса,
реализованные текущим RuntimeClass объектом.
C++
STDMETHOD(
GetIids
Параметры
iidCount
iids
Возвращаемое значение
Значение S_OK в случае успешного выполнения; в противном случае — значение
E_OUTOFMEMORY .
RuntimeClass::GetRuntimeClassName
Возвращает имя класса среды выполнения текущего RuntimeClass объекта.
C++
STDMETHOD( GetRuntimeClassName )(
_Out_ HSTRING* runtimeName
);
Параметры
runtimeName
Возвращаемое значение
S_OK в случае успешного выполнения; в противном случае — значение HRESULT ,
указывающее на ошибку.
Комментарии
Если или __WRL_FORCE_INSPECTABLE_CLASS_MACRO__ не определена ошибка
утверждения, возникает __WRL_STRICT__ ошибка утверждения.
RuntimeClass::GetTrustLevel
Возвращает уровень доверия текущего RuntimeClass объекта.
C++
STDMETHOD(GetTrustLevel)(
);
Параметры
trustLvl
Комментарии
Если или __WRL_FORCE_INSPECTABLE_CLASS_MACRO__ не определена ошибка
утверждения, возникает __WRL_STRICT__ ошибка утверждения.
RuntimeClass::GetWeakReference
Возвращает указатель на слабый ссылочный объект для текущего RuntimeClass
объекта.
C++
STDMETHOD(
GetWeakReference
Параметры
weakReference
Возвращаемое значение
Всегда S_OK .
RuntimeClass::InternalAddRef
Увеличивает число ссылок к текущему RuntimeClass объекту.
C++
ULONG InternalAddRef();
Возвращаемое значение
Результирующее число ссылок.
RuntimeClass::QueryInterface
Извлекает указатель на указанный идентификатор интерфейса.
C++
STDMETHOD(
QueryInterface
(REFIID riid,
Параметры
riid
Идентификатор интерфейса.
ppvObject
Возвращаемое значение
S_OK в случае успешного выполнения; в противном случае — значение HRESULT ,
указывающее на ошибку.
RuntimeClass::Release
Выполняет операцию выпуска COM для текущего RuntimeClass объекта.
C++
STDMETHOD_(
ULONG,
Release
)();
Возвращаемое значение
S_OK в случае успешного выполнения; в противном случае — значение HRESULT ,
указывающее на ошибку.
Комментарии
Если число ссылок становится нулевым, RuntimeClass объект удаляется.
RuntimeClass::RuntimeClass
Инициализирует текущий RuntimeClass экземпляр класса.
C++
RuntimeClass();
RuntimeClassFlags - структура
Статья • 03.04.2023
Синтаксис
C++
struct RuntimeClassFlags;
Параметры
flags
Элементы
Открытые константы
Имя Описание
Иерархия наследования
RuntimeClassFlags
Требования
Заголовок: implements.h
Константа RuntimeClassFlags::value
Поле, содержащее значение перечисления RuntimeClassType .
C++
RuntimeClassType - перечисление
Статья • 03.04.2023
Синтаксис
C++
enum RuntimeClassType;
Участники
Значения
Имя Описание
Требования
Заголовок: implements.h
Синтаксис
C++
template<typename Base>
Параметры
Базы
Базовый класс.
Комментарии
Базовый класс должен предоставлять конструктор по умолчанию.
Элементы
Открытые методы
name Описание
Иерархия наследования
I0
ChainInterfaces
I0
RuntimeClassBase
ImplementsHelper
DontUseNewUseMake
RuntimeClassFlags
RuntimeClassBaseT
RuntimeClass
ActivationFactory
SimpleActivationFactory
Требования
Заголовок: module.h
Метод
SimpleActivationFactory::ActivateInstance
Создает экземпляр указанного интерфейса.
C++
STDMETHOD( ActivateInstance )(
);
Параметры
ppvObject
Возвращаемое значение
Значение S_OK, если операция завершилась успешно; в противном случае —
значение HRESULT, указывающее на ошибку.
Комментарии
Если __WRL_STRICT__ параметр определен, возникает ошибка утверждения, если
базовый класс, указанный в параметре шаблона класса, не является производным
от RuntimeClass или не настроен со значением перечисления WinRt или
WinRtClassicComMix RuntimeClassType .
Метод
SimpleActivationFactory::GetRuntimeClassName
Получает имя класса среды выполнения экземпляра класса, указанного в
параметре шаблона класса Base .
C++
STDMETHOD( GetRuntimeClassName )(
_Out_ HSTRING* runtimeName
);
Параметры
runtimeName
Комментарии
Если __WRL_STRICT__ параметр определен, ошибка утверждения возникает, если
класс, указанный параметром шаблона класса, не является производным Base от
RuntimeClass или не настроен со значением перечисления WinRt или
WinRtClassicComMix RuntimeClassType .
Метод SimpleActivationFactory::GetTrustLevel
Возвращает уровень доверия экземпляра класса, заданного параметром Base
шаблона класса.
C++
STDMETHOD(
GetTrustLevel
Параметры
trustLvl
Возвращаемое значение
Всегда S_OK.
SimpleClassFactory - класс
Статья • 03.04.2023
Синтаксис
C++
template<typename Base>
Параметры
Базы
Базовый класс.
Комментарии
Базовый класс должен предоставлять конструктор по умолчанию.
Элементы
Открытые методы
name Описание
Иерархия наследования
I0
ChainInterfaces
I0
RuntimeClassBase
ImplementsHelper
DontUseNewUseMake
RuntimeClassFlags
RuntimeClassBaseT
RuntimeClass
ClassFactory
SimpleClassFactory
Требования
Заголовок: module.h
Метод SimpleClassFactory::CreateInstance
Создает экземпляр указанного интерфейса.
C++
STDMETHOD( CreateInstance )(
REFIID riid,
);
Параметры
pUnkOuter
riid
ppvObject
Возвращаемое значение
Значение S_OK, если операция завершилась успешно; в противном случае —
значение HRESULT, указывающее на ошибку.
Комментарии
Если __WRL_STRICT__ параметр определен, возникает ошибка утверждения, если
базовый класс, указанный в параметре шаблона класса, не является производным
от RuntimeClass или не настроен со значением перечисления ClassicCom или
WinRtClassicComMix RuntimeClassType .
Класс WeakRef
Статья • 17.10.2022
Синтаксис
C++
Члены
Открытые конструкторы
Имя Описание
Открытые методы
Имя Описание
Открытые операторы
Название Описание
Примечания
WeakRef Объект поддерживает строгую ссылку, которая связана с объектом и
может быть допустимой или недопустимой. Чтобы получить строгую ссылку, As()
вызовите метод или AsIID() . Когда строгая ссылка допустима, возможно
обращение к связанному объекту. Когда строгая ссылка недопустима ( nullptr ),
связанный объект недоступен.
C++
WeakRef wr;
strongComptrRef.AsWeak(&wr);
// and the following code tries to get a strong ref from the weak ref:
ComPtr<ISomeInterface> strongRef;
HRESULT hr = wr.As(&strongRef);
// This check won't work with the Windows 10 SDK version of the library.
if(wr == nullptr)
приведенный выше код не работает при использовании пакета SDK для Windows
10 (или более поздней версии). Вместо этого проверьте указатель, переданный в
параметре nullptr .
C++
if (strongRef == nullptr)
Иерархия наследования
ComPtr
└ WeakRef
Requirements (Требования)
Заголовок client.h
Имен Microsoft::WRL
Конструктор WeakRef::WeakRef
Инициализирует новый экземпляр класса WeakRef .
C++
WeakRef();
WeakRef(
decltype(__nullptr)
);
WeakRef(
);
WeakRef(
);
WeakRef(
);
WeakRef(
);
Параметры
ptr
Примечания
Первый конструктор инициализирует пустой WeakRef объект. Второй конструктор
инициализирует WeakRef объект из указателя на IWeakReference интерфейс. Третий
конструктор инициализирует WeakRef объект из ссылки на ComPtr<IWeakReference>
объект. Четвертый и пятый конструкторы инициализируют WeakRef объект из
другого WeakRef объекта.
WeakRef::~WeakRef использовал
Выполняет деинициализацию текущего экземпляра WeakRef класса.
C++
~WeakRef();
WeakRef::As
Задает указанный ComPtr параметр указателя для представления указанного
интерфейса.
C++
template<typename U>
HRESULT As(
);
template<typename U>
HRESULT As(
);
Параметры
U
Идентификатор интерфейса.
ptr
Возвращаемое значение
S_OK значение, если эта операция завершилась с ошибкой; в противном
Примечания
Если параметр U имеет значение IWeakReference или не является производным от
IInspectable , генерируется ошибка.
WeakRef::AsIID
Задает указанный ComPtr параметр указателя для представления УКАЗАННОГО
идентификатора интерфейса.
C++
HRESULT AsIID(
REFIID riid,
);
Параметры
riid
Идентификатор интерфейса.
ptr
Возвращаемое значение
S_OK значение, если эта операция завершилась с ошибкой; в противном
Примечания
Если параметр riid не является производным от IInspectable , генерируется
ошибка. Эта ошибка заменяет возвращаемое значение.
WeakRef::CopyTo
Присваивает указатель на интерфейс (при его наличии) указанной переменной
указателя.
C++
HRESULT CopyTo(
REFIID riid,
template<typename U>
HRESULT CopyTo(
);
HRESULT CopyTo(
);
Параметры
U
riid
ptr
Возвращаемое значение
S_OK в случае успеха. в противном случае возвращается значение HRESULT,
Примечания
Возвращаемое значение S_OK означает, что эта операция выполнена успешно, но
не указывает, была ли слабая ссылка разрешена строгой ссылке. Если
возвращается, проверяется, является ли S_OK параметр ptr строгой ссылкой, то
есть параметр ptr не равен nullptr .
начиная с Windows 10 пакета SDK этот метод не устанавливает WeakRef экземпляр в
nullptr значение, если не удалось получить слабую ссылку, поэтому следует
избегать проверки ошибок, которые проверяют значение WeakRef для nullptr .
Вместо этого проверьте ptr nullptr наличие.
WeakRef::operator&
ComPtrRef Возвращает объект, представляющий текущий WeakRef объект.
C++
Возвращаемое значение
ComPtrRef Объект, представляющий текущий WeakRef объект.
Примечания
WeakRef::operator& является внутренним вспомогательным оператором, который
Синтаксис
C++
namespace Microsoft::WRL::Details;
Члены
Классы
name Описание
Имя Описание
Перечисления
Имя Описание
Функции
Имя Описание
Требования
Заголовок: async.h, client.h, corewrappers.h, event.h, ftm.h, implements.h, internal.h,
module.h
Пространства имен: Microsoft::WRL::D etails
Синтаксис
C++
HSTRING activationId,
IActivationFactory **ppFactory
);
Параметры
activationId
ppFactory
Возвращаемое значение
Значение S_OK, если операция завершилась успешно; в противном случае —
значение HRESULT, описывающее тип сбоя. Возможные ошибки HRESULT
CLASS_E_CLASSNOTAVAILABLE и E_INVALIDARG.
Комментарии
Возвращает фабрику активации для указанного идентификатора активации.
Среда выполнения Windows вызывает эту функцию обратного вызова для запроса
объекта, указанного именем класса среды выполнения.
Требования
Заголовок: module.h
Синтаксис
C++
template<typename TMemberFunction>
struct ArgTraits;
template<typename TDelegateInterface>
struct ArgTraits<
template<
typename TDelegateInterface,
typename TArg1,
typename TArg2,
typename TArg3
>
struct ArgTraits<
template<
typename TDelegateInterface,
typename TArg1,
typename TArg2,
typename TArg3,
typename TArg4
>
struct ArgTraits<
template<
typename TDelegateInterface,
typename TArg1,
typename TArg2,
typename TArg3,
typename TArg4,
typename TArg5
>
struct ArgTraits<
template<
typename TDelegateInterface,
typename TArg1,
typename TArg2,
typename TArg3,
typename TArg4,
typename TArg5,
typename TArg6
>
struct ArgTraits<
template<
typename TDelegateInterface,
typename TArg1,
typename TArg2,
typename TArg3,
typename TArg4,
typename TArg5,
typename TArg6,
typename TArg7
>
struct ArgTraits<
template<
typename TDelegateInterface,
typename TArg1,
typename TArg2,
typename TArg3,
typename TArg4,
typename TArg5,
typename TArg6,
typename TArg7,
typename TArg8
>
struct ArgTraits<
template<
typename TDelegateInterface,
typename TArg1,
typename TArg2,
typename TArg3,
typename TArg4,
typename TArg5,
typename TArg6,
typename TArg7,
typename TArg8,
typename TArg9
>
struct ArgTraits<
Параметры
TMemberFunction
TDelegateInterface
Интерфейс делегата.
TArg1
TArg2
TArg3
TArg4
TArg5
TArg6
TArg7
TArg8
TArg9
Элементы
Имя Описание
Открытые константы
Имя Описание
Иерархия наследования
ArgTraits
Требования
Заголовок: event.h
Пространства имен: Microsoft::WRL::D etails
ArgTraits::args
Поддерживает инфраструктуру WRL и не предназначена для использования
непосредственно из кода.
C++
Комментарии
Сохраняет количество параметров в методе Invoke интерфейса делегата. Если args
равно -1, для сигнатуры метода не может быть совпадений Invoke .
ArgTraitsHelper - структура
Статья • 03.04.2023
Синтаксис
C++
template<typename TDelegateInterface>
struct ArgTraitsHelper;
Параметры
TDelegateInterface
Интерфейс делегата.
Комментарии
Помогает определить общие характеристики аргументов делегата.
Элементы
Имя Описание
Открытые константы
Имя Описание
Требования
Заголовок: event.h
ArgTraitsHelper::args
Поддерживает инфраструктуру WRL и не предназначена для использования
непосредственно из кода.
C++
Комментарии
Помогает ArgTraitsHelper::args сохранить количество параметров в методе Invoke
интерфейса делегата.
AsyncStatusInternal - перечисление
Статья • 03.04.2023
Синтаксис
C++
enum AsyncStatusInternal;
Remarks
Задает сопоставление между внутренними перечислениями состояний
асинхронных операций и перечислением Windows::Foundation::AsyncStatus .
Элементы
_Created
Эквивалентно ::Windows::Foundation::AsyncStatus::Created .
_Started
Эквивалентно ::Windows::Foundation::AsyncStatus::Started .
_Completed
Эквивалентно ::Windows::Foundation::AsyncStatus::Completed .
_Cancelled
Эквивалентно ::Windows::Foundation::AsyncStatus::Cancelled .
_Error
Эквивалентно ::Windows::Foundation::AsyncStatus::Error .
Требования
Заголовок: async.h
Синтаксис
C++
struct BoolStruct;
Remarks
Структура BoolStruct определяет, управляет ли ComPtr объект временем
существования интерфейса. BoolStruct используется внутри оператора BoolType().
Элементы
Имя Описание
Иерархия наследования
BoolStruct
Требования
Заголовок: internal.h
BoolStruct::Member
Поддерживает инфраструктуру WRL и не предназначена для использования
непосредственно из кода.
C++
int Member;
Комментарии
Указывает, что ComPtr управляет временем существования объекта интерфейса
или нет.
ComPtrRef - класс
Статья • 03.04.2023
Синтаксис
C++
Параметры
T
Комментарии
Представляет ссылку на объект типа ComPtr<T> .
Члены
Открытые конструкторы
name Описание
Открытые методы
name Описание
Открытые операторы
Имя Описание
Иерархия наследования
ComPtrRefBase
ComPtrRef
Требования
Заголовок: client.h
ComPtrRef::ComPtrRef
Поддерживает инфраструктуру WRL и не предназначена для использования
непосредственно из кода.
C++
ComPtrRef(
_In_opt_ T* ptr
);
Параметры
Ptr
Комментарии
Инициализирует новый экземпляр ComPtrRef класса из указанного указателя на
другой ComPtrRef объект.
ComPtrRef::GetAddressOf
Поддерживает инфраструктуру WRL и не предназначена для использования
непосредственно из кода.
C++
Возвращаемое значение
Адрес указателя на интерфейс, представленный текущим ComPtrRef объектом .
Комментарии
Извлекает адрес указателя на интерфейс, представленный текущим ComPtrRef
объектом .
ComPtrRef::operator==
Поддерживает инфраструктуру WRL и не предназначена для использования
непосредственно из кода.
C++
bool operator==(
const Details::ComPtrRef<ComPtr<T>>& a,
const Details::ComPtrRef<ComPtr<U>>& b
);
bool operator==(
const Details::ComPtrRef<ComPtr<T>>& a,
decltype(__nullptr)
);
bool operator==(
decltype(__nullptr),
const Details::ComPtrRef<ComPtr<T>>& a
);
bool operator==(
const Details::ComPtrRef<ComPtr<T>>& a,
void* b
);
bool operator==(
void* b,
const Details::ComPtrRef<ComPtr<T>>& a
);
Параметры
a
Возвращаемое значение
Первый оператор возвращает true значение , если объект a равен объекту b; в
противном случае false — значение .
Второй и третий операторы выдают , true если объект равен ; в nullptr противном
случае — false значение .
Четвертый и пятый операторы дают результат true , если объект a равен объекту
b; в противном случае — false значение .
Комментарии
Определение равенства двух объектов ComPtrRef .
ComPtrRef::operator!=
Поддерживает инфраструктуру WRL и не предназначена для использования
непосредственно из кода.
C++
bool operator!=(
const Details::ComPtrRef<ComPtr<T>>& a,
const Details::ComPtrRef<ComPtr<U>>& b
);
bool operator!=(
const Details::ComPtrRef<ComPtr<T>>& a,
decltype(__nullptr)
);
bool operator!=(
decltype(__nullptr),
const Details::ComPtrRef<ComPtr<T>>& a
);
bool operator!=(
const Details::ComPtrRef<ComPtr<T>>& a,
void* b
);
bool operator!=(
void* b,
const Details::ComPtrRef<ComPtr<T>>& a
);
Параметры
a
Возвращаемое значение
Первый оператор возвращает true значение , если объект a не равен объекту b; в
противном случае — false значение .
Второй и третий операторы выдают , true если объект a не равен ; в
nullptr противном случае — false значение .
Комментарии
Определяет неравенство двух объектов ComPtrRef .
ComPtrRef::operator InterfaceType**
Поддерживает инфраструктуру WRL и не предназначена для использования
непосредственно из кода.
C++
operator InterfaceType**();
Комментарии
Удаляет текущий ComPtrRef объект и возвращает указатель на интерфейс,
представленный ComPtrRef объектом .
ComPtrRef::operator*
Поддерживает инфраструктуру WRL и не предназначена для использования
непосредственно из кода.
C++
Возвращаемое значение
Указатель на интерфейс, представленный текущим ComPtrRef объектом .
Комментарии
Извлекает указатель на интерфейс, представленный текущим ComPtrRef объектом .
ComPtrRef::operator T*
Поддерживает инфраструктуру WRL и не предназначена для использования
непосредственно из кода.
C++
operator T*();
Комментарии
Возвращает значение элемента данных ptr_ текущего ComPtrRef объекта .
ComPtrRef::operator void**
Поддерживает инфраструктуру WRL и не предназначена для использования
непосредственно из кода.
C++
Комментарии
Удаляет текущий ComPtrRef объект , приводит указатель к интерфейсу,
представленному ComPtrRef объектом в виде указателя void на , а затем
возвращает указатель приведения.
ComPtrRef::ReleaseAndGetAddressOf
Поддерживает инфраструктуру WRL и не предназначена для использования
непосредственно из кода.
C++
InterfaceType** ReleaseAndGetAddressOf();
Возвращаемое значение
Указатель на интерфейс, представленный удаленным ComPtrRef объектом.
Комментарии
Удаляет текущий ComPtrRef объект и возвращает указатель на интерфейс,
представленный ComPtrRef объектом .
ComPtrRefBase - класс
Статья • 03.04.2023
Синтаксис
C++
class ComPtrRefBase;
Параметры
T
Комментарии
Представляет базовый класс для класса ComPtrRef .
Элементы
Имя Описание
Открытые операторы
Имя Описание
Имя Описание
Иерархия наследования
ComPtrRefBase
Требования
Заголовок: client.h
Оператор ComPtrRefBase::operator
IInspectable**
Поддерживает инфраструктуру WRL и не предназначена для использования
непосредственно из кода.
C++
Комментарии
Приводит текущий элемент данных ptr_ к указателю IInspectable на интерфейс.
C++
Комментарии
Приводит текущий элемент данных ptr_ к указателю IUnknown на интерфейс.
ComPtrRefBase::p tr_
Поддерживает инфраструктуру WRL и не предназначена для использования
непосредственно из кода.
C++
T* ptr_;
Комментарии
Указатель на тип, заданный текущим параметром шаблона. ptr_ — это
защищенный элемент данных.
CreatorMap - структура
Статья • 03.04.2023
Синтаксис
C++
struct CreatorMap;
Remarks
Содержит сведения об инициализации, регистрации и отмене регистрации
объектов.
Элементы
Имя Описание
Требования
Заголовок: module.h
CreatorMap::activationId
Поддерживает инфраструктуру WRL и не предназначена для использования
непосредственно из кода.
C++
union {
} activationId;
Параметры
Clsid
Идентификатор интерфейса.
getRuntimeName
Комментарии
Представляет идентификатор объекта, который определен идентификатором
класса классической модели COM или именем в среде выполнения Windows.
CreatorMap::factoryCache
Поддерживает инфраструктуру WRL и не предназначена для использования
непосредственно из кода.
C++
FactoryCache* factoryCache;
Комментарии
Сохраняет указатель на кэш фабрики CreatorMap для .
CreatorMap::factoryCreator
Поддерживает инфраструктуру WRL и не предназначена для использования
непосредственно из кода.
C++
HRESULT (*factoryCreator)(
REFIID iidClassFactory,
IUnknown** factory);
Параметры
currentflags
Запись
A CreatorMap.
iidClassFactory
фабрика
Возвращаемое значение
Значение S_OK, если операция завершилась успешно; в противном случае —
значение HRESULT, указывающее на ошибку.
Комментарии
Создает фабрику для указанного CreatorMap.
CreatorMap::serverName
Поддерживает инфраструктуру WRL и не предназначена для использования
непосредственно из кода.
C++
Комментарии
Хранит имя сервера для объекта CreatorMap.
DerefHelper - структура
Статья • 03.04.2023
Синтаксис
C++
struct DerefHelper;
struct DerefHelper<T*>;
Параметры
T
Параметр шаблона.
Комментарии
Представляет разыменованный указатель на параметр шаблона T* .
operationInterface; .
Элементы
Имя Описание
Иерархия наследования
DerefHelper
Требования
Заголовок: async.h
Синтаксис
C++
class DontUseNewUseMake;
Remarks
Запрещает использование оператора new в RuntimeClass . Следовательно, вместо
этого необходимо использовать функцию Make .
Элементы
Открытые операторы
Имя Описание
Иерархия наследования
DontUseNewUseMake
Требования
Заголовок: implements.h
DontUseNewUseMake::operator new
Поддерживает инфраструктуру WRL и не предназначена для использования
непосредственно из кода.
C++
size_t,
);
Параметры
__unnamed0
Размещения
Выделяемый тип.
Возвращаемое значение
Предоставляет способ передачи дополнительных аргументов при перегрузке
оператора new .
Комментарии
Перегружает оператор new и предотвращает его использование в RuntimeClass .
EnableIf - структура
Статья • 03.04.2023
Синтаксис
C++
struct EnableIf;
Параметры
T
Тип.
Логическое выражение.
Комментарии
Определяет данные-член типа, указанного в качестве второго параметра шаблона,
если первый параметр шаблона равен true .
Элементы
Имя Описание
Требования
Заголовок: internal.h
Синтаксис
C++
class EventTargetArray :
public Microsoft::WRL::RuntimeClass<
Microsoft::WRL::RuntimeClassFlags<ClassicCom>,
IUnknown
>;
Remarks
Представляет массив обработчиков событий.
Члены
Открытые конструкторы
name Описание
Открытые методы
name Описание
Иерархия наследования
EventTargetArray
Требования
Заголовок: event.h
EventTargetArray::~EventTargetArray
Поддерживает инфраструктуру WRL и не предназначена для использования
непосредственно из кода.
C++
~EventTargetArray();
Комментарии
Деинициализирует текущий EventTargetArray класс.
EventTargetArray::AddTail
Поддерживает инфраструктуру WRL и не предназначена для использования
непосредственно из кода.
C++
void AddTail(
);
Параметры
Элемент
Комментарии
Добавляет указанный обработчик событий в конец внутреннего массива
обработчиков событий.
EventSource .
EventTargetArray::Begin
Поддерживает инфраструктуру WRL и не предназначена для использования
непосредственно из кода.
C++
ComPtr<IUnknown>* Begin();
Возвращаемое значение
Адрес первого элемента во внутреннем массиве обработчиков событий.
Комментарии
Возвращает адрес первого элемента во внутреннем массиве обработчиков
событий.
EventTargetArray::End
Поддерживает инфраструктуру WRL и не предназначена для использования
непосредственно из кода.
C++
ComPtr<IUnknown>* End();
Возвращаемое значение
Адрес последнего элемента во внутреннем массиве обработчиков событий.
Комментарии
Возвращает адрес последнего элемента во внутреннем массиве обработчиков
событий.
EventTargetArray::EventTargetArray
Поддерживает инфраструктуру WRL и не предназначена для использования
непосредственно из кода.
C++
EventTargetArray(
size_t items
);
Параметры
ч
S_OK
E_OUTOFMEMORY
S_FALSE
Комментарии
Инициализирует новый экземпляр класса EventTargetArray .
EventTargetArray::Length
Поддерживает инфраструктуру WRL и не предназначена для использования
непосредственно из кода.
C++
size_t Length();
Возвращаемое значение
Текущее количество элементов во внутреннем массиве обработчиков событий.
Комментарии
Возвращает текущее количество элементов во внутреннем массиве обработчиков
событий.
FactoryCache - структура
Статья • 03.04.2023
Синтаксис
C++
struct FactoryCache;
Remarks
Содержит местоположение фабрики класса и значение, которое идентифицирует
зарегистрированный объект класса Среды выполнения Windows или модели COM.
Элементы
Имя Описание
Иерархия наследования
FactoryCache
Требования
Заголовок: module.h
C++
union {
WINRT_REGISTRATION_COOKIE winrt;
DWORD com;
} cookie;
Комментарии
Содержит значение, идентифицирующее зарегистрированный объект среда
выполнения Windows или COM-класса, а затем используется для отмены
регистрации объекта.
FactoryCache::factory
Поддерживает среда выполнения Windows инфраструктуру библиотеки шаблонов
C++ и не предназначен для использования непосредственно из кода.
C++
IUnknown* factory;
Комментарии
Указывает на фабрику среда выполнения Windows или COM-класса.
ImplementsBase - структура
Статья • 03.04.2023
Синтаксис
C++
struct ImplementsBase;
Remarks
Используется для проверки типов параметров шаблона в разделе Реализация
структуры.
Иерархия наследования
ImplementsBase
Требования
Заголовок: implements.h
Синтаксис
C++
Параметры
RuntimeClassFlagsT
ILst
IsDelegateToClass
Комментарии
Помогает реализовать структуру Implements .
Элементы
Защищенные методы
Имя Описание
Имя Описание
Иерархия наследования
ImplementsHelper
Требования
Заголовок: implements.h
ImplementsHelper::CanCastTo
Поддерживает инфраструктуру WRL и не предназначена для использования
непосредственно из кода.
C++
HRESULT CanCastTo(
REFIID riid,
);
HRESULT CanCastTo(
);
Параметры
riid
Ppv
Iid
Возвращаемое значение
Значение S_OK, если операция завершилась успешно; в противном случае —
значение HRESULT, указывающее на ошибку.
Комментарии
Возвращает указатель на указанный идентификатор интерфейса.
ImplementsHelper::CastToUnknown
Поддерживает инфраструктуру WRL и не предназначена для использования
непосредственно из кода.
C++
IUnknown* CastToUnknown();
Возвращаемое значение
Указатель на базовый IUnknown интерфейс.
Комментарии
Возвращает указатель на базовый IUnknown интерфейс для текущей Implements
структуры.
ImplementsHelper::FillArrayWithIid
Поддерживает инфраструктуру WRL и не предназначена для использования
непосредственно из кода.
C++
void FillArrayWithIid(
Параметры
index
iids
Комментарии
Вставляет идентификатор интерфейса, заданный текущим параметром нулевого
шаблона, в указанный элемент массива.
ImplementsHelper::IidCount
Поддерживает инфраструктуру WRL и не предназначена для использования
непосредственно из кода.
C++
Комментарии
Содержит количество идентификаторов реализованных интерфейсов в текущем
Implements объекте .
InterfaceList - структура
Статья • 03.04.2023
Синтаксис
C++
struct InterfaceList;
Параметры
T
Комментарии
Используется для создания рекурсивного списка интерфейсов.
Элементы
Имя Описание
Иерархия наследования
InterfaceList
Требования
Заголовок: implements.h
Синтаксис
C++
template <
typename T0,
typename T1 = Nil,
typename T2 = Nil,
typename T3 = Nil,
typename T4 = Nil,
typename T5 = Nil,
typename T6 = Nil,
typename T7 = Nil,
typename T8 = Nil,
typename T9 = Nil
>
struct InterfaceListHelper;
struct InterfaceListHelper<T0, Nil, Nil, Nil, Nil, Nil, Nil, Nil, Nil>;
Параметры
T0
T1
T2
T3
T4
T6
T7
T8
T9
Комментарии
Создает тип InterfaceList путем рекурсивного применения указанных аргументов
параметра шаблона.
Элементы
Имя Описание
Иерархия наследования
InterfaceListHelper
Требования
Заголовок: implements.h
Синтаксис
C++
template<typename I0>
template<typename CloakedType>
CloakedIid<CloakedType>
>;
template<>
Параметры
I0
Имя интерфейса.
CloakedType
Комментарии
Реализует общие характеристики интерфейса.
Элементы
Открытые методы
name Описание
Открытые константы
Имя Описание
Иерархия наследования
InterfaceTraits
Требования
Заголовок: implements.h
InterfaceTraits::CanCastTo
Поддерживает инфраструктуру WRL и не предназначена для использования
непосредственно из кода.
C++
template<typename T>
_In_ T* ptr,
REFIID riid,
);
Параметры
Ptr
riid
Ppv
Возвращаемое значение
true Значение , если операция выполнена успешно и ptr приводится к указателю
Комментарии
Указывает, можно ли привести указанный указатель к указателю на Base .
InterfaceTraits::CastToBase
Поддерживает инфраструктуру WRL и не предназначена для использования
непосредственно из кода.
C++
template<typename T>
_In_ T* ptr
);
Параметры
T
Ptr
Указатель на тип T.
Возвращаемое значение
Указатель на объект Base .
Комментарии
Приводит определенный указатель к указателю на Base .
InterfaceTraits::CastToUnknown
Поддерживает инфраструктуру WRL и не предназначена для использования
непосредственно из кода.
C++
template<typename T>
_In_ T* ptr
);
Параметры
T
Ptr
Указатель на тип T.
Возвращаемое значение
Указатель на объект IUnknown, производный от которого Base .
Комментарии
Приводит определенный указатель к указателю на IUnknown .
InterfaceTraits::FillArrayWithIid
Поддерживает инфраструктуру WRL и не предназначена для использования
непосредственно из кода.
C++
);
Параметры
index
iids
Комментарии
Назначает идентификатор Base интерфейса элементу массива, указанному
аргументом индекса.
В отличие от имени этого API, изменяется только один элемент массива; не весь
массив.
InterfaceTraits::IidCount
Поддерживает инфраструктуру WRL и не предназначена для использования
непосредственно из кода.
C++
Комментарии
Содержит количество идентификаторов интерфейсов, связанных с текущим
InterfaceTraits объектом.
InterfaceTraits::Verify
Поддерживает инфраструктуру WRL и не предназначена для использования
непосредственно из кода.
C++
Комментарии
Проверяет правильное Base производное.
Синтаксис
C++
struct InvokeHelper;
public Microsoft::WRL::RuntimeClass<
RuntimeClassFlags<Delegate>,
TDelegateInterface
>;
public Microsoft::WRL::RuntimeClass<
RuntimeClassFlags<Delegate>,
TDelegateInterface
>;
public Microsoft::WRL::RuntimeClass<
RuntimeClassFlags<Delegate>,
TDelegateInterface
>;
public Microsoft::WRL::RuntimeClass<
RuntimeClassFlags<Delegate>,
TDelegateInterface
>;
Microsoft::WRL::RuntimeClass<
RuntimeClassFlags<Delegate>,
TDelegateInterface
>;
Microsoft::WRL::RuntimeClass<
RuntimeClassFlags<Delegate>,
TDelegateInterface
>;
Microsoft::WRL::RuntimeClass<
RuntimeClassFlags<Delegate>,
TDelegateInterface
>;
Microsoft::WRL::RuntimeClass<
RuntimeClassFlags<Delegate>,
TDelegateInterface
>;
Microsoft::WRL::RuntimeClass<
RuntimeClassFlags<Delegate>,
TDelegateInterface
>;
Microsoft::WRL::RuntimeClass<
RuntimeClassFlags<Delegate>,
TDelegateInterface
>;
Параметры
TDelegateInterface
TCallback
argCount
Комментарии
Предоставляет реализацию метода на Invoke() основе указанного числа и типа
аргументов.
Элементы
Имя Описание
Открытые конструкторы
name Описание
Открытые методы
name Описание
Имя Описание
Иерархия наследования
InvokeHelper
Требования
Заголовок: event.h
Пространства имен: Microsoft::WRL::D etails
InvokeHelper::callback_
Поддерживает инфраструктуру WRL и не предназначена для использования
непосредственно из кода.
C++
TCallback callback_;
Комментарии
Представляет обработчик событий, вызываемого при возникновении события.
InvokeHelper::Invoke
Поддерживает инфраструктуру WRL и не предназначена для использования
непосредственно из кода.
C++
STDMETHOD(
Invoke
)();
STDMETHOD(
Invoke
)(typename Traits;
STDMETHOD(
Invoke
)( typename Traits;
STDMETHOD(
Invoke
)( typename Traits;
STDMETHOD(
Invoke
)( typename Traits;
STDMETHOD(
Invoke
)( typename Traits;
STDMETHOD(
Invoke
)( typename Traits;
STDMETHOD(
Invoke
)( typename Traits;
STDMETHOD(
Invoke
)( typename Traits;
STDMETHOD(
Invoke
)( typename Traits;
Параметры
arg1
Аргумент 1.
arg2
Аргумент 2.
arg3
Аргумент 3.
arg4
Аргумент 4.
arg5
Аргумент 5.
arg6
Аргумент 6.
arg7
Аргумент 7.
arg8
Аргумент 8.
arg9
Аргумент 9.
Возвращаемое значение
S_OK в случае успешного выполнения; в противном случае — HRESULT,
описывающий ошибку.
Комментарии
Вызывает обработчик событий, сигнатура которого содержит указанное
количество аргументов.
InvokeHelper::InvokeHelper
Поддерживает инфраструктуру WRL и не предназначена для использования
непосредственно из кода.
C++
explicit InvokeHelper(
TCallback callback
);
Параметры
Обратного вызова
Обработчик событий.
Комментарии
Инициализирует новый экземпляр класса InvokeHelper .
Синтаксис
C++
struct IsBaseOfStrict;
Параметры
Базы
Базовый тип.
Производный
Производный тип.
Комментарии
Проверяет, является ли один тип базовым для другого.
Элементы
Открытые константы
Имя Описание
Требования
Заголовок: internal.h
IsBaseOfStrict::value
Поддерживает инфраструктуру WRL и не предназначена для использования
непосредственно из кода.
C++
Комментарии
Указывает, является ли один тип базовым для другого.
value Имеет значение , true если тип Base является базовым классом типа
Derived , в противном случае — false .
IsSame - структура
Статья • 03.04.2023
Синтаксис
C++
struct IsSame;
Параметры
T1
Тип.
T2
Другой тип.
Комментарии
Определяет, совпадают ли указанные типы друг с другом.
Элементы
Открытые константы
Имя Описание
Иерархия наследования
IsSame
Требования
Заголовок: internal.h
IsSame::value
Поддерживает инфраструктуру WRL и не предназначена для использования
непосредственно из кода.
C++
struct IsSame
};
};
Комментарии
Указывает, совпадают ли заданные типы друг с другом.
Синтаксис
C++
template<
typename T,
bool hasWeakReferenceSupport =
!__is_base_of(RuntimeClassFlags<InhibitWeakReference>,
T)
>
class MakeAllocator;
template<typename T>
template<typename T>
Параметры
T
Имя типа.
hasWeakReferenceSupport
true выделение памяти для объекта, поддерживающего слабые ссылки; false для
выделения памяти для объекта, который не поддерживает слабые ссылки.
Комментарии
Выделяет память для активируемых классов с слабой поддержкой ссылок или без
нее.
Члены
Открытые конструкторы
name Описание
Открытые методы
name Описание
Иерархия наследования
MakeAllocator
Требования
Заголовок: implements.h
MakeAllocator::Allocate
Поддерживает инфраструктуру WRL и не предназначена для использования
непосредственно из кода.
C++
__forceinline void* Allocate();
Возвращаемое значение
Если операция завершилась успешно, представляет указатель на выделенную
память; в противном случае — значение nullptr .
Комментарии
Выделяет память и связывает ее с текущим MakeAllocator объектом .
MakeAllocator::D etach
Поддерживает инфраструктуру WRL и не предназначена для использования
непосредственно из кода.
C++
Комментарии
Отменяет связь памяти, выделенной методом Allocate , с текущим MakeAllocator
объектом.
MakeAllocator::MakeAllocator
Поддерживает инфраструктуру WRL и не предназначена для использования
непосредственно из кода.
C++
MakeAllocator();
Комментарии
Инициализирует новый экземпляр класса MakeAllocator .
MakeAllocator::~MakeAllocator
Поддерживает инфраструктуру WRL и не предназначена для использования
непосредственно из кода.
C++
~MakeAllocator();
Комментарии
Деинициализирует текущий MakeAllocator экземпляр класса .
Синтаксис
C++
template <
typename T,
typename I,
typename TArg1,
typename TArg2,
typename TArg3,
typename TArg4,
typename TArg5,
typename TArg6,
typename TArg7,
typename TArg8,
typename TArg9>
HRESULT MakeAndInitialize(
TArg1 &&arg1,
TArg2 &&arg2,
TArg3 &&arg3,
TArg4 &&arg4,
TArg5 &&arg5,
TArg6 &&arg6,
TArg7 &&arg7,
TArg8 &&arg8,
Параметры
T
TArg1
TArg2
TArg4
TArg5
TArg6
TArg7
TArg8
TArg9
arg1
arg2
arg3
arg4
arg5
arg6
arg7
arg8
Возвращаемое значение
Значение HRESULT.
Комментарии
Дополнительные сведения о различиях между этой функцией и
Microsoft::WRL::Make см. в статье How to: Instantiate WRL Components Directly
(Непосредственное создание экземпляров компонентов WRL), чтобы узнать о
различиях между этой функцией и Microsoft::WRL::Make и примером.
Требования
Заголовок: implements.h
Синтаксис
C++
class ModuleBase;
Remarks
Представляет базовый класс классов Module .
Члены
Открытые конструкторы
name Описание
Открытые методы
name Описание
Иерархия наследования
ModuleBase
Требования
Заголовок: implements.h
ModuleBase::~ModuleBase
Поддерживает инфраструктуру WRL и не предназначена для использования
непосредственно из кода.
C++
virtual ~ModuleBase();
Комментарии
Деинициализирует текущий ModuleBase экземпляр класса .
ModuleBase::D ecrementObjectCount
Поддерживает инфраструктуру WRL и не предназначена для использования
непосредственно из кода.
C++
Возвращаемое значение
Счетчик перед операцией уменьшения.
Комментарии
При реализации уменьшает число объектов, отслеживаемых модулем.
ModuleBase::IncrementObjectCount
Поддерживает инфраструктуру WRL и не предназначена для использования
непосредственно из кода.
C++
Возвращаемое значение
Счетчик перед операцией приращения.
Комментарии
При реализации увеличивает число объектов, отслеживаемых модулем.
ModuleBase::ModuleBase
Поддерживает инфраструктуру WRL и не предназначена для использования
непосредственно из кода.
C++
ModuleBase();
Комментарии
Инициализирует экземпляр класса Module .
Move - функция
Статья • 03.04.2023
Синтаксис
C++
template<class T>
);
Параметры
T
Тип аргумента.
Arg
Возвращаемое значение
Аргумент параметра после ссылки или rvalue-reference признаки, если таковые
имеются, были удалены.
Комментарии
Перемещает указанный аргумент из одного расположения в другое.
Требования
Заголовок: internal.h
Синтаксис
C++
struct Nil;
Remarks
Используется для указания неопределенного необязательного параметра шаблона.
Иерархия наследования
Nil
Требования
Заголовок: implements.h
Синтаксис
C++
HRESULT hr,
Параметры
ч
dwExceptionFlags
Комментарии
Вызывает исключение в вызывающем потоке.
Требования
Заголовок: internal.h
Синтаксис
C++
struct RemoveIUnknown;
Параметры
T
Класс .
Комментарии
Создает тип, эквивалентный IUnknown типу на основе , но имеющий невиртуальные
QueryInterface функции-члены , AddRef и Release .
Элементы
Имя Описание
RemoveIUnknown
Требования
Заголовок: client.h
Синтаксис
C++
template<class T>
struct RemoveReference;
template<class T>
struct RemoveReference<T&>;
template<class T>
struct RemoveReference<T&&>;
Параметры
T
Класс .
Комментарии
Удаляет свойство reference или rvalue-reference из указанного параметра шаблона
класса.
Элементы
Имя Описание
Иерархия наследования
RemoveReference
Требования
Заголовок: internal.h
Синтаксис
C++
struct RuntimeClassBase;
Remarks
Используется для обнаружения RuntimeClass в функции Make .
Иерархия наследования
RuntimeClassBase
Требования
Заголовок: implements.h
Синтаксис
C++
Параметры
RuntimeClassTypeT
Комментарии
Предоставляет вспомогательные методы для операций QueryInterface и получения
идентификаторов интерфейсов.
Элементы
Защищенные методы
Имя Описание
Иерархия наследования
RuntimeClassBaseT
Требования
Заголовок: implements.h
RuntimeClassBaseT::AsIID
Поддерживает инфраструктуру WRL и не предназначена для использования
непосредственно из кода.
C++
template<typename T>
_In_ T* implements,
REFIID riid,
);
Параметры
T
Реализует
riid
ppvObject
Возвращаемое значение
S_OK в случае успешного выполнения; в противном случае — HRESULT,
описывающий ошибку.
Комментарии
Извлекает указатель на указанный идентификатор интерфейса.
RuntimeClassBaseT::GetImplementedIIDS
Поддерживает инфраструктуру WRL и не предназначена для использования
непосредственно из кода.
C++
template<typename T>
_In_ T* implements,
);
Параметры
T
Реализует
iidCount
iids
Возвращаемое значение
S_OK в случае успешного выполнения; в противном случае — HRESULT,
описывающий ошибку.
Комментарии
Извлекает массив идентификаторов интерфейсов, реализованных указанным
типом.
Функция Swap (WRL)
Статья • 03.04.2023
Синтаксис
C++
);
Параметры
left
Первый аргумент.
right
Второй аргумент.
Возвращаемое значение
Комментарии
Обмен значениями двух указанных аргументов.
Требования
Заголовок: internal.h
Синтаксис
C++
Параметры
Модуль
Модуль.
serverName
forceTerminate
true для завершения работы фабрик классов независимо от того, являются ли они
Возвращаемое значение
true значение , если все фабрики классов были прерваны; в противном случае —
false .
Комментарии
Завершает работу фабрик классов в указанном модуле.
Требования
Заголовок: module.h
Синтаксис
C++
struct VerifyInheritanceHelper;
Параметры
I
Тип.
Базы
Другой тип.
Комментарии
Проверяет, является ли один интерфейс производным от другого интерфейса.
Элементы
Открытые методы
name Описание
Иерархия наследования
VerifyInheritanceHelper
Требования
Заголовок: implements.h
VerifyInheritanceHelper::Verify
Поддерживает инфраструктуру WRL и не предназначена для использования
непосредственно из кода.
C++
Комментарии
Проверяет два интерфейса, заданных текущими параметрами шаблона, и
определяет, является ли один интерфейс производным от другого.
Синтаксис
C++
struct VerifyInterfaceHelper;
Параметры
I
isWinRTInterface
Комментарии
Проверяет, соответствует ли интерфейс, указанный параметром шаблона,
определенным требованиям.
Элементы
Открытые методы
name Описание
Иерархия наследования
VerifyInterfaceHelper
Требования
Заголовок: implements.h
VerifyInterfaceHelper::Verify
Поддерживает инфраструктуру WRL и не предназначена для использования
непосредственно из кода.
C++
Комментарии
Проверяет, отвечает ли определенным требованиям интерфейс, заданный текущим
параметром шаблона.
Класс WeakReference
Статья • 03.04.2023
Синтаксис
C++
class WeakReference;
Remarks
Представляет слабую ссылку, которую можно использовать с среда выполнения
Windows или классической моделью COM. Слабая ссылка представляет собой
объект, который может быть доступен или недоступен.
Члены
Открытые конструкторы
name Описание
name Описание
Открытые методы
name Описание
Иерархия наследования
WeakReference
Требования
Заголовок: implements.h
WeakReference::~WeakReference
Поддерживает инфраструктуру WRL и не предназначена для использования
непосредственно из кода.
C++
virtual ~WeakReference();
Возвращаемое значение
Комментарии
Деинициализирует текущий WeakReference экземпляр класса .
WeakReference::D ecrementStrongReference
Поддерживает инфраструктуру WRL и не предназначена для использования
непосредственно из кода.
C++
ULONG DecrementStrongReference();
Комментарии
Уменьшает число строгих ссылок текущего WeakReference объекта.
Возвращаемое значение
Уменьшенное число строгих ссылок.
WeakReference::IncrementStrongReference
Поддерживает инфраструктуру WRL и не предназначена для использования
непосредственно из кода.
C++
ULONG IncrementStrongReference();
Возвращаемое значение
Увеличенное число строгих ссылок.
Комментарии
Увеличивает число строгих ссылок текущего WeakReference объекта.
WeakReference::Resolve
Поддерживает инфраструктуру WRL и не предназначена для использования
непосредственно из кода.
C++
STDMETHOD(Resolve)
(REFIID riid,
);
Параметры
riid
Идентификатор интерфейса.
ppvObject
После завершения этой операции копия текущей строгой ссылки, если число
надежных ссылок не равно нулю.
Возвращаемое значение
S_OK, если эта операция выполнена успешно, а число надежных ссылок равно
нулю. Параметр ppvObject имеет значение nullptr .
Комментарии
Задает указанный указатель на текущее значение строгой ссылки, если счетчик
строгих ссылок не равен нулю.
WeakReference::SetUnknown
Поддерживает инфраструктуру WRL и не предназначена для использования
непосредственно из кода.
C++
void SetUnknown(
);
Параметры
Unk
Комментарии
Задает строгой ссылку текущего WeakReference объекта на указанный указатель
интерфейса.
WeakReference::WeakReference
Поддерживает инфраструктуру WRL и не предназначена для использования
непосредственно из кода.
C++
WeakReference();
Комментарии
Инициализирует новый экземпляр класса WeakReference .
Синтаксис
C++
namespace Microsoft::WRL::Wrappers;
Члены
Определения типов
Имя Описание
FileHandle HandleT<HandleTraits::FileHandleTraits>
Классы
name Описание
Требования
Заголовок: corewrappers.h
Синтаксис
C++
class CriticalSection;
Члены
Конструктор
Имя Описание
Открытые методы
name Описание
Иерархия наследования
CriticalSection
Требования
Заголовок: corewrappers.h
CriticalSection::~CriticalSection
Деинициализирует и уничтожает текущий CriticalSection объект.
C++
WRL_NOTHROW ~CriticalSection();
CriticalSection::CriticalSection
Инициализирует объект синхронизации, который похож на объект мьютекса, но
может использоваться только потоками одного процесса.
C++
explicit CriticalSection(
ULONG spincount = 0
);
Параметры
spincount
Комментарии
Дополнительные сведения о критических разделах и спин-счетчиках см
InitializeCriticalSectionAndSpinCount . в функции в Synchronization разделе
Documenation API Windows.
CriticalSection::cs_
Объявляет элемент данных критического раздела.
C++
CRITICAL_SECTION cs_;
Комментарии
Эти данные-член защищены.
CriticalSection::IsValid
Указывает, является ли текущий критический раздел допустимым.
C++
Возвращаемое значение
По умолчанию всегда возвращает . true
CriticalSection::Lock
Ожидает владельца указанного объекта критического раздела. Функция
возвращает, когда вызывающему потоку предоставлено право собственности.
C++
SyncLock Lock();
_In_ CRITICAL_SECTION* cs
);
Параметры
Cs
Возвращаемое значение
Объект блокировки, который можно использовать, чтобы разблокировать текущую
критическую секцию.
Комментарии
Первая функция Lock влияет на текущий объект критической секции. Вторая
функция Lock влияет на указанную пользователем критическую секцию.
CriticalSection::TryLock
Пытается войти в критически важный раздел без блокировки. Если вызов
выполнен успешно, вызывающий поток берет на себя ответственность за
критически важный раздел.
C++
SyncLock TryLock();
_In_ CRITICAL_SECTION* cs
);
Параметры
Cs
Возвращаемое значение
Ненулевое значение, если критический раздел успешно введен или текущий поток
уже владеет критическим разделом. Ноль, если критический раздел уже
принадлежит другому потоку.
Комментарии
Первая функция TryLock влияет на текущий объект критической секции. Вторая
функция TryLock влияет на указанную пользователем критическую секцию.
Класс событий (WRL)
Статья • 03.04.2023
Представляет событие.
Синтаксис
C++
Члены
Открытые конструкторы
name Описание
Открытые операторы
Имя Описание
Иерархия наследования
HandleT
Event
Требования
Заголовок: corewrappers.h
C++
explicit Event(
HANDLE h = HandleT::Traits::GetInvalidValue()
);
WRL_NOTHROW Event(
_Inout_ Event&& h
);
Параметры
h
Event::operator=
Назначает указанную Event ссылку текущему Event экземпляру.
C++
_Inout_ Event&& h
);
Параметры
h
Возвращаемое значение
Указатель на текущий Event экземпляр.
HandleT - класс
Статья • 03.04.2023
Синтаксис
C++
class HandleT;
Параметры
Признаки дескриптора
Элементы
Имя Описание
Открытые конструкторы
name Описание
Открытые методы
name Описание
name Описание
HandleT::D etach Отменяет связь текущего HandleT объекта с его базовым дескриптором.
Защищенные методы
Имя Описание
Открытые операторы
Имя Описание
Имя Описание
Иерархия наследования
HandleT
Требования
Заголовок: corewrappers.h
C++
~HandleT();
HandleT::Attach
Связывает указанный дескриптор с текущим HandleT объектом .
C++
void Attach(
typename HandleTraits::Type h
);
Параметры
h
Дескриптор.
HandleT::Close
Закрывает текущий объект HandleT .
C++
void Close();
Комментарии
Дескриптор, лежащий в основе текущего HandleT , закрывается, а HandleT для
присваивается недопустимое состояние.
C++
Возвращаемое значение
Базовый дескриптор.
Комментарии
После завершения этой операции текущий HandleT объект устанавливается в
недопустимое состояние.
HandleT::Get
Возвращает значение базового дескриптора.
C++
Возвращаемое значение
Дескриптор.
HandleT::handle_
Содержит дескриптор, представленный HandleT объектом .
C++
HandleT::HandleT
Инициализирует новый экземпляр класса HandleT .
C++
explicit HandleT(
typename HandleTraits::Type h =
HandleTraits::GetInvalidValue()
);
HandleT(
_Inout_ HandleT&& h
);
Параметры
h
Дескриптор.
Комментарии
Первый конструктор инициализирует HandleT объект, который не является
допустимым дескриптором для объекта . Второй конструктор создает новый
HandleT объект из параметра h.
HandleT::InternalClose
Закрывает текущий объект HandleT .
C++
Возвращаемое значение
true Значение , если текущий HandleT объект успешно закрыт; в противном случае
— значение false .
Комментарии
InternalClose() имеет значение protected .
HandleT::IsValid
Указывает, представляет ли текущий HandleT объект дескриптор.
C++
Возвращаемое значение
true Значение , HandleT если представляет дескриптор; в противном случае —
значение false .
HandleT::operator=
Перемещает значение указанного HandleT объекта в текущий HandleT объект .
C++
HandleT& operator=(
_Inout_ HandleT&& h
);
Параметры
h
Возвращаемое значение
Ссылка на текущий HandleT объект .
Комментарии
Эта операция делает недействительным объект, заданный HandleT параметром h.
Класс HString
Статья • 03.04.2023
Синтаксис
C++
class HString;
Remarks
Среда выполнения Windows предоставляет доступ к строкам через дескрипторы
HSTRING. Класс предоставляет удобные HString функции и операторы для
упрощения с помощью дескрипторов HSTRING. Этот класс может обрабатывать
время существования объекта HSTRING, принадлежащего ему, с помощью
шаблона RAII.
Члены
Открытые конструкторы
name Описание
Открытые методы
name Описание
Открытые операторы
Имя Описание
Иерархия наследования
HString
Требования
Заголовок: corewrappers.h
C++
~HString() throw()
HString::Attach
Связывает указанный HString объект с текущим HString объектом .
C++
void Attach(
HSTRING hstr
) throw()
Параметры
hstr
HString::CopyTo
Копирует текущий HString объект в объект HSTRING.
C++
HRESULT CopyTo(
) const throw();
Параметры
str
Комментарии
Этот метод вызывает функцию WindowsDuplicateString .
HString::D etach
Отменяет связь указанного HString объекта с его базовым значением.
C++
Возвращаемое значение
Базовое HString значение перед началом операции отсоединения.
HString::Get
Извлекает значение базового дескриптора HSTRING.
C++
Возвращаемое значение
Значение базового дескриптора HSTRING.
HString::GetAddressOf
Извлекает указатель на базовый дескриптор HSTRING.
C++
Возвращаемое значение
Указатель на базовый дескриптор HSTRING.
Комментарии
После этой операции строковое значение базового дескриптора HSTRING будет
уничтожено.
HString::GetRawBuffer
Извлекает указатель на базовые строковые данные.
C++
Параметры
Длина Указатель на переменную int , которая получает длину данных.
Возвращаемое значение
Указатель const на базовые строковые данные.
HString::HString
Инициализирует новый экземпляр класса HString .
C++
HString() throw();
Параметры
hstr
Дескриптор HSTRING.
Других
Комментарии
Первый конструктор инициализирует пустой HString объект.
Второй конструктор инициализирует новый HString объект значением
существующего другого параметра, а затем удаляет другой параметр.
HString::IsValid
Указывает, является ли текущий HString объект пустым.
C++
Параметры
true Значение , если текущий HString объект не пуст; в противном случае —
значение false .
HString::MakeReference
Создает HStringReference объект из указанного строкового параметра.
C++
Параметры
sizeDest
str
len
Оператор HString::operator=
Перемещает значение другого HString объекта в текущий HString объект .
C++
Параметры
Других
Комментарии
Значение существующего другого объекта копируется в текущий HString объект, а
затем другой объект уничтожается.
Оператор HString::operator==
Указывает, равны ли два параметра.
C++
Параметры
Lhs
Rhs
Возвращаемое значение
true Значение , если параметры lhs и rhs равны; в противном случае — false .
Оператор HString::operator!=
Указывает, равны ли два параметра.
C++
Параметры
Lhs
Rhs
Возвращаемое значение
true Значение , если параметры lhs и rhs не равны; в противном случае — false .
Оператор HString::operator<
Указывает, меньше ли первый параметр, чем второй.
C++
Параметры
Lhs
Rhs
Возвращаемое значение
true Значение , если параметр lhs меньше параметра rhs ; в противном случае —
false .
HString::Release
Удаляет базовое строковое значение и инициализирует текущий HString объект
пустым значением.
C++
HString::Set
Задает для текущего HString объекта значение указанной строки или HString
параметра с расширенными символами.
C++
HRESULT Set(
HRESULT Set(
) throw();
HRESULT Set(
) throw();
Параметры
str
len
hstr
Синтаксис
C++
class HStringReference;
Remarks
Время существования резервного буфера в новом HSTRING не управляется среда
выполнения Windows. Вызывающий объект выделяет исходную строку в кадре
стека, чтобы избежать выделения кучи и исключить риск утечки памяти. Кроме
того, вызывающий объект должен убедиться, что исходная строка остается
неизменной в течение всего времени существования присоединенного объекта
HSTRING. Дополнительные сведения см. в статье Функция
WindowsCreateStringReference.
Члены
Открытые конструкторы
name Описание
Открытые методы
Член Описание
Открытые операторы
Имя Описание
Иерархия наследования
HStringReference
Требования
Заголовок: corewrappers.h
HStringReference::CopyTo
Копирует текущий HStringReference объект в объект HSTRING.
C++
HRESULT CopyTo(
) const throw();
Параметры
str
HStringReference::Get
Извлекает значение базового дескриптора HSTRING.
C++
Возвращаемое значение
Значение базового дескриптора HSTRING.
HStringReference::GetRawBuffer
Извлекает указатель на базовые строковые данные.
C++
Параметры
Длина Указатель на переменную int , которая получает длину данных.
Возвращаемое значение
Указатель const на базовые строковые данные.
HStringReference::HStringReference
Инициализирует новый экземпляр класса HStringReference .
C++
Параметры
sizeDest
str
len
Других
Комментарии
Первый конструктор инициализирует новый HStringReference объект того же
размера, что и параметр str.
HStringReference::operator=
Перемещает значение другого HStringReference объекта в текущий
HStringReference объект .
C++
Параметры
Других
Комментарии
Значение существующего другого объекта копируется в текущий HStringReference
объект, а затем другой объект уничтожается.
HStringReference::operator==
Указывает, равны ли два параметра.
C++
Параметры
Lhs
Rhs
Возвращаемое значение
true Значение , если параметры lhs и rhs равны; в противном случае — false .
HStringReference::operator!=
Указывает, равны ли два параметра.
C++
Параметры
Lhs
Rhs
Возвращаемое значение
true Значение , если параметры lhs и rhs не равны; в противном случае — false .
HStringReference::operator<
Указывает, меньше ли первый параметр, чем второй.
C++
Параметры
Lhs
Rhs
Возвращаемое значение
true Значение , если параметр lhs меньше параметра rhs ; в противном случае —
false .
Класс Mutex
Статья • 03.04.2023
Синтаксис
C++
Члены
Имя Описание
Открытый конструктор
Имя Описание
Открытые члены
Имя Описание
Mutex::Lock Ожидает, пока текущий объект или объект, связанный Mutex с указанным
дескриптором, не освобождает мьютекс или истерегает указанный интервал
времени ожидания.
Общедоступный оператор
Имя Описание
Имя Описание
Иерархия наследования
Mutex
Требования
Заголовок: corewrappers.h
Mutex::Lock
Ожидает, пока текущий объект или объект, связанный Mutex с указанным
дескриптором, не освобождает мьютекс или истерегает указанный интервал
времени ожидания.
C++
SyncLock Lock(
);
HANDLE h,
);
Параметры
milliseconds
Mutex::Mutex
Инициализирует новый экземпляр класса Mutex .
C++
explicit Mutex(
HANDLE h
);
Mutex(
_Inout_ Mutex&& h
);
Параметры
h
Комментарии
Первый конструктор инициализирует Mutex объект из указанного дескриптора.
Второй конструктор инициализирует Mutex объект из указанного дескриптора, а
затем перемещает владение мьютексом в текущий Mutex объект .
Mutex::operator=
Назначает (перемещает) указанный Mutex объект текущему Mutex объекту.
C++
Mutex& operator=(
_Inout_ Mutex&& h
);
Параметры
h
Комментарии
Дополнительные сведения см. в разделе Move Semantics статьи Rvalue Reference
Declarator: &&.
Класс RoInitializeWrapper
Статья • 03.04.2023
Синтаксис
C++
class RoInitializeWrapper;
Remarks
RoInitializeWrapper — это удобство, которое инициализирует среда выполнения
Члены
Открытые конструкторы
name Описание
Открытые операторы
Имя Описание
Требования
Заголовок: corewrappers.h
RoInitializeWrapper::HRESULT()
Извлекает значение HRESULT, созданное последним RoInitializeWrapper
конструктором.
C++
operator HRESULT()
RoInitializeWrapper::RoInitializeWrapper
Инициализирует новый экземпляр класса RoInitializeWrapper .
C++
RoInitializeWrapper(RO_INIT_TYPE flags)
Параметры
flags
Комментарии
Класс RoInitializeWrapper вызывает Windows::Foundation::Initialize(flags) .
RoInitializeWrapper::~RoInitializeWrapper
Неинициализирует среда выполнения Windows.
C++
~RoInitializeWrapper()
Комментарии
Класс RoInitializeWrapper вызывает Windows::Foundation::Uninitialize() .
Класс Semaphore
Статья • 03.04.2023
Синтаксис
C++
Члены
Имя Описание
Открытые конструкторы
name Описание
Открытые методы
name Описание
Открытые операторы
Имя Описание
Имя Описание
Иерархия наследования
Semaphore
Требования
Заголовок: corewrappers.h
Семафор::Lock
Ожидает, пока текущий объект или объект, связанный Semaphore с указанным
дескриптором, не перейдет в состояние сигнала или не истедет указанный
интервал времени ожидания.
C++
SyncLock Lock(
);
HANDLE h,
);
Параметры
milliseconds
Semaphore::operator=
Перемещает указанный дескриптор из Semaphore объекта в текущий Semaphore
объект .
C++
Semaphore& operator=(
_Inout_ Semaphore&& h
);
Параметры
h
Возвращаемое значение
Ссылка на текущий Semaphore объект .
Семафор::Семафор
Инициализирует новый экземпляр класса Semaphore .
C++
explicit Semaphore(
HANDLE h
);
WRL_NOTHROW Semaphore(
_Inout_ Semaphore&& h
);
Параметры
h
Синтаксис
C++
class SRWLock;
Remarks
Для синхронизации доступа между потоками к объекту или ресурсу используется
тонкая блокировка чтения или записи. Дополнительные сведения см. в разделе
Функции синхронизации.
Элементы
Имя Описание
Открытые конструкторы
name Описание
Открытые методы
name Описание
Имя Описание
Иерархия наследования
SRWLock
Требования
Заголовок: corewrappers.h
SRWLock::~SRWLock
Деинициализирует экземпляр SRWLock класса .
C++
~SRWLock();
SRWLock::LockExclusive
SRWLock Получает объект в монопольном режиме.
C++
SyncLockExclusive LockExclusive();
);
Параметры
lock
Возвращаемое значение
Объект SRWLock в монопольном режиме.
SRWLock::LockShared
SRWLock Получает объект в общем режиме.
C++
SyncLockShared LockShared();
);
Параметры
lock
Возвращаемое значение
Объект SRWLock в общем режиме.
SRWLock::SRWLock
Инициализирует новый экземпляр класса SRWLock .
C++
SRWLock();
SRWLock::SRWLock_
Содержит базовую переменную блокировки для текущего SRWLock объекта .
C++
SRWLOCK SRWLock_;
SRWLock::TryLockExclusive
Пытается получить объект в монопольном SRWLock режиме для текущего или
указанного SRWLock объекта. Если вызов выполнен успешно, вызывающий поток
берет на себя ответственность за блокировку.
C++
SyncLockExclusive TryLockExclusive();
);
Параметры
lock
Возвращаемое значение
В случае успеха объект в монопольном SRWLock режиме и вызывающий поток
овладеют блокировкой. В противном случае — SRWLock объект, состояние которого
недопустимо.
SRWLock::TryLockShared
Пытается получить SRWLock объект в общем режиме для текущего или указанного
SRWLock объекта.
C++
);
Параметры
lock
Возвращаемое значение
В случае успеха SRWLock объект в режиме общего доступа и вызывающий поток
овладеют блокировкой. В противном случае — SRWLock объект, состояние которого
недопустимо.
Пространство имен
Microsoft::WRL::Wrappers::Details
Статья • 03.04.2023
Синтаксис
C++
namespace Microsoft::WRL::Wrappers::Details;
Члены
Классы
name Описание
Методы
Имя Описание
Требования
Заголовок: corewrappers.h
Синтаксис
C++
HSTRING lhs,
HSTRING rhs)
Параметры
Lhs
Rhs
Возвращаемое значение
Значение Условие
Комментарии
Сравнивает два указанных объекта HSTRING и возвращает целое число,
указывающее их относительное положение в порядке сортировки.
Требования
Заголовок: corewrappers.h
Пространства имен: Microsoft::WRL::Wrappers::D etails
Синтаксис
C++
class SyncLockT;
Параметры
Признаки синхронизации
Комментарии
Представляет тип, который может занимать монопольное или совместное
владение ресурсом.
Члены
Открытые конструкторы
name Описание
Защищенные конструкторы
Имя Описание
Имя Описание
Открытые методы
name Описание
Имя Описание
Иерархия наследования
SyncLockT
Требования
Заголовок: corewrappers.h
SyncLockT::~SyncLockT
Поддерживает инфраструктуру WRL и не предназначена для использования
непосредственно из кода.
C++
~SyncLockT();
Комментарии
Деинициализирует экземпляр SyncLockT класса .
SyncLockt::IsLocked
Поддерживает инфраструктуру WRL и не предназначена для использования
непосредственно из кода.
C++
Возвращаемое значение
true , если SyncLockT , объект заблокирован, в противном случае — false .
Комментарии
Указывает, принадлежит ли текущему SyncLockT объекту ресурс, SyncLockT то есть
объект заблокирован.
SyncLockT::sync_
Поддерживает инфраструктуру WRL и не предназначена для использования
непосредственно из кода.
C++
Комментарии
Содержит базовый ресурс, представленный классом SyncLockT .
SyncLockT::SyncLockT
Поддерживает инфраструктуру WRL и не предназначена для использования
непосредственно из кода.
C++
SyncLockT(
);
explicit SyncLockT(
);
Параметры
Других
Синхронизации
Комментарии
Инициализирует новый экземпляр класса SyncLockT .
SyncLockT::Unlock
Поддерживает инфраструктуру WRL и не предназначена для использования
непосредственно из кода.
C++
void Unlock();
Комментарии
Освобождает управление ресурсом, удерживаемым текущим SyncLockT объектом ,
если таковой есть.
Класс SyncLockWithStatusT
Статья • 03.04.2023
Синтаксис
C++
Параметры
Признаки синхронизации
Комментарии
Представляет тип, который может принимать монопольное или совместное
владение ресурсом.
Члены
Открытые конструкторы
name Описание
Защищенные конструкторы
Имя Описание
Имя Описание
Открытые методы
name Описание
Имя Описание
Иерархия наследования
SyncLockT
SyncLockWithStatusT
Требования
Заголовок: corewrappers.h
SyncLockWithStatusT::GetStatus
Поддерживает инфраструктуру WRL и не предназначена для использования
непосредственно из кода.
C++
DWORD GetStatus() const;
Возвращаемое значение
Результат операции ожидания для объекта, основанного SyncLockWithStatusT на
классе , например Mutex или Semaphore. Ноль (0) означает, что операция
ожидания вернула состояние сигнала; в противном случае произошло другое
состояние, например истекло время ожидания.
Комментарии
Извлекает состояние ожидания текущего SyncLockWithStatusT объекта.
SyncLockWithStatusT::IsLocked
Поддерживает инфраструктуру WRL и не предназначена для использования
непосредственно из кода.
C++
Комментарии
Указывает, принадлежит ли текущий SyncLockWithStatusT объект ресурсу,
SyncLockWithStatusT то есть объект заблокирован.
Возвращаемое значение
true , если SyncLockWithStatusT , объект заблокирован, в противном случае — false .
SyncLockWithStatusT::status_
Поддерживает инфраструктуру WRL и не предназначена для использования
непосредственно из кода.
C++
DWORD status_;
Комментарии
Содержит результат базовой операции ожидания после операции блокировки
объекта на основе текущего SyncLockWithStatusT объекта.
SyncLockWithStatusT::SyncLockWithStatusT
Поддерживает инфраструктуру WRL и не предназначена для использования
непосредственно из кода.
C++
SyncLockWithStatusT(
);
explicit SyncLockWithStatusT(
DWORD status
);
Параметры
Других
Синхронизации
status
Комментарии
Инициализирует новый экземпляр класса SyncLockWithStatusT .
Синтаксис
C++
namespace Microsoft::WRL::Wrappers::HandleTraits;
Члены
Структуры
Имя Описание
Требования
Заголовок: corewrappers.h
Синтаксис
struct CriticalSectionTraits;
Члены
Имя Описание
Открытые методы
name Описание
Иерархия наследования
CriticalSectionTraits
Требования
Заголовок: corewrappers.h
CriticalSectionTraits::GetInvalidValue
Специализируется на шаблоне CriticalSection , чтобы он всегда был
недопустимым.
C++
Возвращаемое значение
Всегда возвращает указатель на недопустимую критическую секцию.
Комментарии
Модификатор Type определен как typedef CRITICAL_SECTION* Type; .
CriticalSectionTraits::Unlock
Специализируется на шаблоне CriticalSection таким образом, чтобы он
поддерживал освобождение прав владения указанным объектом критического
раздела.
C++
_In_ Type cs
);
Параметры
Cs
Комментарии
Модификатор Type определен как typedef CRITICAL_SECTION* Type; .
Синтаксис
C++
Члены
Иерархия наследования
HANDLENullTraits
EventTraits
Требования
Заголовок: corewrappers.h
Синтаксис
C++
Члены
Иерархия наследования
HANDLETraits
FileHandleTraits
Требования
Заголовок: corewrappers.h
Синтаксис
C++
struct HANDLENullTraits;
Члены
Имя Описание
Открытые методы
name Описание
Иерархия наследования
HANDLENullTraits
Требования
Заголовок: corewrappers.h
C++
_In_ Type h
);
Параметры
h
Закрываемая дескриптор.
Возвращаемое значение
true если дескриптор h успешно закрыт; в противном случае — false .
HANDLENullTraits::GetInvalidValue
Представляет недопустимый дескриптор.
C++
Возвращаемое значение
Всегда возвращает значение nullptr .
HANDLETraits - структура
Статья • 03.04.2023
Синтаксис
C++
struct HANDLETraits;
Члены
Имя Описание
Открытые методы
name Описание
Иерархия наследования
HANDLETraits
Требования
Заголовок: corewrappers.h
C++
_In_ Type h
);
Параметры
h
Закрываемая дескриптор.
Возвращаемое значение
true если дескриптор h успешно закрыт; в противном случае — false .
HANDLETraits::GetInvalidValue
Представляет недопустимый дескриптор.
C++
Возвращаемое значение
Всегда возвращает значение INVALID_HANDLE_VALUE (INVALID_HANDLE_VALUE
определяется Windows).
MutexTraits - структура
Статья • 03.04.2023
Синтаксис
C++
Элементы
Открытые методы
name Описание
Иерархия наследования
HANDLENullTraits
MutexTraits
Требования
Заголовок: corewrappers.h
Метод MutexTraits::Unlock
Освобождает монопольное управление общим ресурсом.
C++
_In_ Type h
);
Параметры
h
Синтаксис
C++
Элементы
Открытые методы
name Описание
Иерархия наследования
HANDLENullTraits
SemaphoreTraits
Требования
Заголовок: corewrappers.h
SemaphoreTraits::Unlock
Освобождает управление общим ресурсом.
C++
inline static void Unlock(
_In_ Type h
);
Параметры
h
Комментарии
Если операция разблокировки завершилась неудачно, Unlock() выдает ошибку,
указывающую причину сбоя.
SRWLockExclusiveTraits - структура
Статья • 03.04.2023
Синтаксис
C++
struct SRWLockExclusiveTraits;
Члены
Имя Описание
Открытые методы
name Описание
Иерархия наследования
SRWLockExclusiveTraits
Требования
Заголовок: corewrappers.h
Пространства имен: Microsoft::WRL::Wrappers::HandleTraits
SRWLockExclusiveTraits::GetInvalidValue
Извлекает SRWLockExclusiveTraits объект, который всегда является недопустимым.
C++
Возвращаемое значение
Пустой объект SRWLockExclusiveTraits .
SRWLockExclusiveTraits::Unlock
Освобождает монопольный контроль над указанным SRWLock объектом.
C++
);
Параметры
Srwlock
Синтаксис
C++
struct SRWLockSharedTraits;
Члены
Имя Описание
Открытые методы
name Описание
Иерархия наследования
SRWLockSharedTraits
Требования
Заголовок: corewrappers.h
C++
Возвращаемое значение
Дескриптор SRWLockSharedTraits объекта.
SRWLockSharedTraits::Unlock
Освобождает монопольный контроль над указанным SRWLock объектом.
C++
);
Параметры
Srwlock
Синтаксис
C++
namespace Windows::Foundation;
Члены
Функции
Имя Описание
Требования
Заголовок: client.h
Синтаксис
C++
template<typename T>
);
Параметры
T
activatableClassId
Экземпляр
Возвращаемое значение
S_OK в случае успешного выполнения; в противном случае — ошибка HRESULT,
указывающая причину ошибки.
Требования
Заголовок: client.h
Синтаксис
C++
template<typename T>
);
Параметры
T
activatableClassId
фабрика
Возвращаемое значение
Значение S_OK, если операция завершилась успешно; в противном случае —
значение HRESULT, указывающее причину неудачного завершения операции.
Требования
Заголовок: client.h
) Важно!
Синтаксис
C++
template<typename T>
void** IID_PPV_ARGS_Helper(
_Inout_ Microsoft::WRL::Details::ComPtrRef<T> pp
);
Параметры
T
Pp
Возвращаемое значение
Аргумент pp приводится к указателю void на указатель на .
Комментарии
Ошибка времени компиляции возникает, если параметр шаблона T не является
производным от IUnknown .
Требования
Заголовок: client.h