2010-06-02 2 views
5

«Традиционным» способом я имею в виду регистрацию DLL в реестре.Разница между «традиционными» COM и COM + (в службах компонентов)

Существует, по-видимому, другой способ его настройки, перейдя в mmc-> Component Services-> COM + Applications и добавив файл .tlb.

У меня есть библиотека COM, которая поддерживает оба метода. Когда он устанавливается, он регистрируется в реестре как компонент COM, и он отлично работает. Однако, когда я добавил файл .tlb, используя метод Component Services, поведение кажется другим, и оно начинает выдавать ошибки.

Я подозреваю, что это имеет какое-то отношение к маршалингу и передаче объекта между процессами? (Извините, я действительно нооб в области COM)

Может ли кто-нибудь указать мне хороший ресурс, чтобы очистить мое понимание?

+0

Каковы некоторые из ошибок? – N0Alias

+0

У меня есть метод 'X.Method()', который принимает другой тип 'X', что означает нечто вроде' void Method (X another) '. Выполнение этого метода дает мне «Невозможно преобразовать систему .__ ComObject to X» – kizzx2

ответ

9

COM + (компонентные услуги) предоставляет много инфраструктуры из коробки; например COM + обеспечивает транзакцию, безопасность, объединение объектов и некоторые другие сервисы.

Когда вы регистрируете COM-компонент под COM +, он запускает «Out Of Process»; в этом режиме вы гарантированно имеете прокси-сервер между вашим COM-сервером и его клиентами.

Лучшее место, я могу думать узнать больше о COM + является официальным сайт MS: http://msdn.microsoft.com/en-us/library/ms685978(VS.85).aspx

Надеется, что это помогает.

+2

Будет ли COM-компонент отключен, зависит от того, как вы его зарегистрируете. Он будет отсутствовать, если вы выберете «серверное приложение», но оно будет включено, если вы выберете «приложение библиотеки». – sharptooth

+0

Итак, если я создаю его в proc, не так ли это, как зарегистрировать его в реестре, а затем вызвать 'CoCreateInstance'? – kizzx2

+1

Вы все равно используете CoCreateInstance(). Это просто, что COM + перехватывает вызов и создает на сервере внепроцесса. Я не получаю библиотечные приложения COM + - даже есть вопрос http://stackoverflow.com/questions/1762823/whats-the-purpose-of-com-library-applications – sharptooth

3

Согласен с предыдущим сообщением.

Одна вещь для добавления: фактическая регистрация библиотеки типов (.tlb-файл) является нормальной и для COM, а не только для COM +. Библиотека типов генерируется автоматически компилятором IDL. Он содержит описание ваших интерфейсов и объектов.

Чтобы вы могли «импортировать» ваш COM-компонент в какой-либо проект, и видны определения интерфейсов и объектов.

4

COM - это объектная модель компонента, которая используется на локальной машине, но COM + является функцией Com plus activex. означает, что он может использоваться как удаленно.

COM + - это эволюция Microsoft Component Object Model (COM) и Microsoft Transaction Server (MTS). DCOM: Distributed-COM. Протокол, который позволяет создавать COM-объект на другом компьютере с того, который использует код

MTS: Microsoft Transaction Server. Как MS координирует транзакцию на нескольких серверах.

COM + обрабатывает многие задачи управления ресурсами, которые вы ранее должны были программировать самостоятельно, такие как распределение потоков и безопасность. COM + также делает ваши приложения более масштабируемыми, обеспечивая объединение потоков, объединение объектов и активацию объекта точно в срок.

COM + может использоваться для разработки распределенных приложений для Windows.

Если вы программист приложений, вы будете писать компоненты и интегрировать их в качестве приложений. COM + создан в основном для разработчиков Microsoft Visual C++ и Microsoft Visual Basic.