Получить объект COM из другого объекта COM - PullRequest
2 голосов
/ 04 июня 2011

Мне нужно получить интерфейс командного интерфейса и состояния, как указано ниже, из VBScript на странице ASP.COM будет развернут на устройстве Windows CE

Set polyColdObj=CreateObject("PolyCold.Main")
Set statusObj = polyColdObj.StatusInterface()
Set commandObj = polyColdObj.CommandInterface()

Я собираюсь использовать Atl для разработки COM-объекта.Мои сомнения:

  1. Какой должна быть подпись `StatusInterface` и` CommandInterface` в ATL COM?
  2. Должен ли я вызывать AddRef () для `StatusInterface` и` CommandInterface`перед возвратом объекта клиенту автоматизации (VBScript)?
  3. Должен ли я создавать объект каждый раз, когда вызывается StatusInterface или когда создается объект 'PolyCold.Main'?
  4. Это стандартный способ?дать имена для `StatusInterface` и` CommandInterface`?

1 Ответ

2 голосов
/ 04 июня 2011

Какой должна быть подпись StatusInterface и CommandInterface в ATL COM?

По умолчанию методы ATL возвращают значение HRESULT. Чтобы достичь желаемого, вы можете создать метод без параметров, используя мастер ATL. Затем вы можете вручную изменить файл IDL и соответствующую реализацию, чтобы вместо этого ваш метод возвращал CommandInterface. При таком подходе ваш файл IDL будет выглядеть так:

[id(1)] CommandInterface* GetCommandInterface();

И объявление метода в вашем классе ATL будет:

CommandInterface* GetCommandInterface();

Другим вариантом может быть использование одного выходного параметра типа CommandInterface **. Быстрый тест с использованием мастера ATL показывает, что ваш файл IDL будет выглядеть следующим образом:

[id(1)] HRESULT StatusInterface([out] CommandInterface** outStatusInterface);

Должен ли я вызвать AddRef () на StatusInterface и CommandInterface перед возвратом объекта в клиент автоматизации (VBScript)?

Я бы сказал, что да, так как VBScript / ASP должен вызывать Release(), когда ваша локальная переменная выходит за рамки.

Должен ли я создавать объект каждый раз StatusInterface вызывается или когда 'PolyCold.Main' объект создан?

Это зависит от вас. Только вы знаете детали и потребности вашего дизайна.

Это стандартный способ подачи имена для StatusInterface и CommandInterface

Если эти "элементы" должны быть типами интерфейса, то я бы сказал нет. Обычно интерфейсы обозначаются заглавной буквой I в качестве первой буквы. Я бы использовал IStatus и ICommand например. Вероятно, с еще некоторой информацией говоря, какой вид команды и статуса, но это логичное.

...