Прочитать на английском

Поделиться через


Перечисление REGCLS (combaseapi.h)

Управляет типом подключений к объекту класса.

Синтаксис

typedef enum tagREGCLS {
  REGCLS_SINGLEUSE = 0,
  REGCLS_MULTIPLEUSE = 1,
  REGCLS_MULTI_SEPARATE = 2,
  REGCLS_SUSPENDED = 4,
  REGCLS_SURROGATE = 8,
  REGCLS_AGILE = 0x10
} REGCLS;

Константы

 
REGCLS_SINGLEUSE
Значение: 0
После подключения приложения к объекту класса с помощью CoGetClassObject объект класса удаляется из открытого представления, чтобы другие приложения не могли подключиться к нему. Это значение обычно используется для приложений с однооконным интерфейсом (SDI). Указание этого значения не влияет на ответственность объектного приложения за вызов CoRevokeClassObject; Он всегда должен вызывать CoRevokeClassObject по завершении работы с классом объекта.
REGCLS_MULTIPLEUSE
Значение: 1
Несколько приложений могут подключаться к объекту класса с помощью вызовов CoGetClassObject. Если REGCLS_MULTIPLEUSE и CLSCTX_LOCAL_SERVER заданы в вызове CoRegisterClassObject, объект класса также автоматически регистрируется как внутрипроцессный сервер независимо от того, задано ли CLSCTX_INPROC_SERVER явным образом.
REGCLS_MULTI_SEPARATE
Значение: 2
Полезно для регистрации отдельных CLSCTX_LOCAL_SERVER и CLSCTX_INPROC_SERVER фабрик классов с помощью вызовов CoGetClassObject. Если задано REGCLS_MULTI_SEPARATE, каждый контекст выполнения должен задаваться отдельно; CoRegisterClassObject не регистрирует автоматически внепроцессный сервер (для которого задан CLSCTX_LOCAL_SERVER) в качестве внутрипроцессного сервера. Это позволяет EXE-файлу создавать несколько экземпляров объекта для внутрипроцессных потребностей, таких как самостоятельное внедрение, не нарушая его CLSCTX_LOCAL_SERVER регистрации. Если EXE регистрирует фабрику классов REGCLS_MULTI_SEPARATE и фабрику классов CLSCTX_INPROC_SERVER, вызовы создания экземпляров, указывающие CLSCTX_INPROC_SERVER в параметре CLSCTX , выполняемом EXE, будут выполнены локально без обращения к SCM. Этот механизм полезен, когда EXE-файл использует такие функции, как OleCreate и OleLoad для создания внедрения, но в то же время не хочет запускать новый экземпляр для варианта самостоятельного внедрения. Различие важно для внедрения, так как обработчик по умолчанию агрегирует диспетчер прокси-серверов по умолчанию, и приложение должно переопределить это поведение по умолчанию, вызвав OleCreateEmbeddingHelper для варианта самостоятельного внедрения.

Если приложению не нужно различать локальный вариант и вариант inproc, не нужно регистрировать фабрику классов с помощью REGCLS_MULTI_SEPARATE. На самом деле приложение выполняет дополнительный круговой путь к SCM при регистрации фабрики классов MULTIPLEUSE в качестве MULTI_SEPARATE и не регистрирует другую фабрику классов в качестве INPROC_SERVER.
REGCLS_SUSPENDED
Значение: 4
Приостанавливает запросы на регистрацию и активацию для указанного идентификатора CLSID, пока не будет выполнен вызов CoResumeClassObjects. Обычно используется для регистрации идентификаторов CLSID для серверов, которые могут зарегистрировать несколько объектов класса, чтобы сократить общее время регистрации и, следовательно, время запуска серверного приложения, выполняя один вызов SCM независимо от того, сколько идентификаторов CLSID зарегистрировано для сервера.

Примечание Этот флаг предотвращает ошибки активации COM из-за возможного состояния гонки между завершением работы приложения и попыткой этого приложения зарегистрировать класс COM.

 
REGCLS_SURROGATE
Значение: 8
Этот объект класса представляет собой процесс-заменитель, используемый для выполнения серверов DLL. Фабрика классов, зарегистрированная суррогатным процессом, не является фактической фабрикой классов, реализованной сервером DLL, а универсальной фабрикой класса, реализованной суррогатом. Эта универсальная фабрика классов делегирует создание и маршалинг экземпляра фабрике классов сервера DLL, работающего в суррогате. Дополнительные сведения о суррогатах DLL см. в разделе Значение реестра DllSurrogate .
REGCLS_AGILE
Значение: 0x10
Объект класса агрегирует маршалер со свободным потоком
и будут сделаны видимыми для всех inproc квартир. Может использоваться вместе с другими флагами. Например, REGCLS_AGILE
REGCLS_MULTIPLEUSE для регистрации
объект класса, который можно использовать несколько раз из
разные квартиры. Без других флагов, поведение
сохранит REGCLS_SINGLEUSE семантику только в этом
можно создать один экземпляр .

Комментарии

В CoRegisterClassObject члены перечислений REGCLS и CLSCTX , взятые вместе, определяют способ регистрации объекта класса.

Суррогат EXE (в котором выполняются серверы DLL) вызывает CoRegisterClassObject для регистрации фабрики классов с помощью нового значения REGCLS , REGCLS_SURROGATE.

Все фабрики классов для суррогатов DLL должны быть зарегистрированы с помощью REGCLS_SURROGATE set. Не устанавливайте REGCLS_SINGLUSE или REGCLS_MULTIPLEUSE при регистрации суррогата для серверов DLL.

В следующей таблице перечислены допустимые сочетания значений REGCLS и регистрации объектов, на которые влияют эти сочетания.

REGCLS_SINGLEUSE REGCLS_MULTIPLEUSE REGCLS_MULTI_SEPARATE Другое
CLSCTX_INPROC_SERVER Ошибка Внутрипроцессно Внутрипроцессно Ошибка
CLSCTX_LOCAL_SERVER Local Внутрипроцессный/локальный Local Ошибка
Любое действие из вышеперечисленных. Ошибка Внутрипроцессный/локальный Внутрипроцессный/локальный Ошибка
Другие Ошибка Error Error Error

Требования

Требование Значение
Минимальная версия клиента Windows 2000 Professional [только классические приложения]
Минимальная версия сервера Windows 2000 Server [только классические приложения]
Верхняя часть combaseapi.h (включая Objbase.h)

См. также раздел

CoGetClassObject

CoRegisterClassObject

Dllgetclassobject

DllSurrogate