Как использовать IDispatch в плоскости C для вызова COM-объекта

Очевидно, что эта проблема нуждается в улучшенном решении, поскольку мне все еще приходилось использовать консоль GCP в Kubernetes Engine -> Clusters.

Я изменил количество узлов, работающих в моем кластере, на 0, а также изменил минимальное количество узлов на 0, потому что автоматическое масштабирование было включено, а затем оно заработало.

Приведенная выше команда gcloud предоставляет полезную информацию, но она не работает из-за включенной функции автоматического масштабирования. Лучшим решением было бы уменьшить минимальное количество узлов до 0, прежде чем изменить размер кластера до нуля, как показано ниже:

gcloud container clusters update [CLUSTER_NAME] --enable-autoscaling \
    --min-nodes 0 --max-nodes 10 --node-pool [NODE_POOL_NAME]

Или вы можете полностью отключить автоматическое масштабирование:

gcloud container clusters update [CLUSTER_NAME] --no-enable-autoscaling \
--node-pool [NODE_POOL_NAME] --project [PROJECT_ID]]

Теперь вы можете изменить размер узлов кластера до нуля:

gcloud container clusters resize [CLUSTER_NAME] --size=0
14
задан Jason 3 June 2009 в 18:08
поделиться

3 ответа

На CodeProject есть отличная статья под названием "COM на простом языке C".

Вот ссылка на Часть 1 .

Здесь много очень хорошая информация о работе с COM на C в этой статье и в последующих комментариях автора (я думаю, что их 3 или 4 в серии).

Редактировать:
Я был неправ, здесь 8 частей!

Часть 2
Часть 3
Часть 4
Часть 5
Часть 6
Часть 7
Часть 8

17
ответ дан 1 December 2019 в 12:13
поделиться

Также вы можете использовать библиотеку disphelper .

3
ответ дан 1 December 2019 в 12:13
поделиться

В общем, интерфейс C ++ IDispatch - это просто таблица указателей на функции. В C это будет выглядеть примерно так:

typedef struct {
  HRESULT(*pQueryInterface)(void* this, REFIID riid, void **ppvObject);
  ULONG(*pAddRef)(void* this);
  ULONG(*pRelease)(void* this);
  HRESULT(*pGetTypeInfoCount)(void* this, unsigned int* pctInfo);
  HRESULT(*pGetTypeInfo)(void* this, unsigned int iTInfo,LCID lcid, ITypeInfo** ppTInfo);
  HRESULT(*pGetIDsOfNames)(void* this, REFIID riid, OLECHAR** rgszNames, unsigned int cNames, LCID lcid, DISPID* rgDispId);
 HRESULT(*pInvoke)(void* this, DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags,DISPPARAMS* pDispParams, VARIANT* pVarResult, EXCEPINFO* pExcepInfo, unsigned int* puArgErr);
} IDispatch_in_C;

Обратите внимание, что каждый метод имеет указатель THIS в качестве первого параметра, и вам нужно будет определить больше типов, таких как ITypeInfo, REFIID, DISPID и т. Д. И т. Д.

Итак, это большая задача. Но можно создавать интерфейсы C ++ на чистом C.

4
ответ дан 1 December 2019 в 12:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: