Очевидно, что эта проблема нуждается в улучшенном решении, поскольку мне все еще приходилось использовать консоль 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
На CodeProject есть отличная статья под названием "COM на простом языке C".
Вот ссылка на Часть 1 .
Здесь много очень хорошая информация о работе с COM на C в этой статье и в последующих комментариях автора (я думаю, что их 3 или 4 в серии).
Редактировать:
Я был неправ, здесь 8 частей!
В общем, интерфейс 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.