2009-09-23 7 views
2

Но, как COM поддерживает их? Поддерживает ли их C++? Разве я не знаю, что все COM-коды написаны на C++? Или COM - это просто методология, способ создания вашего приложения?Как COM поддерживает дополнительные параметры?

Мне любопытно. Я писал много автоматизации COM от C# в последнее время, и этот вопрос только что пришел ко мне.

ответ

3

эта ссылка может помочь ответить на ваш вопрос о дополнительных параметрах (ответ «да», вы можете сделать их): http://msdn.microsoft.com/en-us/library/f25e2b6b%28VS.80%29.aspx

ком является бинарной спецификацией. вы можете технически создать COM-объект (сервер) на любом языке. Microsoft-языки явно (зловеще?) делают его проще других, потому что они написали спецификацию. создать ком-сервер в прямом C можно ... технически. на самом деле это масштабное мероприятие.

наилучших пожелания, дон

3

Если вы работаете с COM и автоматизацией в C/C++ (или старые версии Delphi), вы должны использовать разновидности параметров, которые вы хотите сделать необязательным. Кроме того, необязательные аргументы, определенные в стиле C++, не поддерживаются для COM.

Это означает, что для тех VARIANT, которые вы должны предоставить при вызове другого объекта, и вы хотите указать необязательные параметры (например, при разговоре с MS Word или Excel через Automation), вам нужно будет инициализировать эти ВАРИАНТЫ с помощью тип VT_ERROR и поле scode, установленное на DISP_E_PARAMNOTFOUND.

При приеме вызовов с других объектов, которые могут упускать параметры (VBScript, JScript), вам необходимо проверить все свои VARIANT для случаев, когда тип был установлен в VT_ERROR, а поле scode - DISP_E_PARAMNOTFOUND.

Эквивалент .NET - использовать объект, установленный для Type.Missing для тех параметров, которые были отображены на COM-параметры. Следующая ссылка может быть полезна для просмотра обеих сторон истории.

.NET4Office : Type.Missing, C#, and Word (MSDN Blog)

Все это коренится в том, как более старые версии VB (6 и предыдущий) обрабатываются необязательные аргументы. Вот ссылка KB MS Support, которая довольно кратка.

How to pass optional parameters when you call a function from C++ (kb238981)

Чтобы решить ваши другие вопросы, неверно полагать, что большинство объектов COM написано на C++, так как COM строго об объявлении интерфейсов и макетов интерфейсов в хорошо известном способе. Не имеет значения, какой язык или инструменты используются для создания COM-объектов, пока они наблюдают и подчиняются макетам поддерживаемых интерфейсов.

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

Смежные вопросы