C++ V83.COMConnector Authenticate()

1. PRAGMA_ONCE 21.12.20 19:15 Сейчас в теме
Доброго времени суток!

Начал разрабатывать небольшое приложение на С++, которое должно подключаться к серверной базе через COMConnector, однако, запнулся на моменте с аутентификацией на кластере.
Согласно документации, метод Authenticate() требует три обязательных параметра (Authenticate(<Кластер>, <Имя>, <Пароль>)), первый из которых принимает тип "Кластер серверов".

Чтобы получить его, в VBS работает строка:
Set Cluster = AgentConnection.GetClusters().GetValue(0)


Используя подключение через IDispatch, я смог получить результат GetClusters(), который возвращает значение "Массив объектов "Кластер Серверов"" типа COMSafeArray, которое метод Invoke приводит к типу VARIANT (параметр retGetClusters):
hr = agentConnector->Invoke(dispIDGetClusters, IID_NULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_METHOD, &argsGetClusters, &retGetClusters, NULL, NULL);


Далее я пытаюсь подставить параметр <Кластер> в аргументы метода Authenticate() следующим кодом:
	UINT puArgErr;
	VARIANT retAuth;
	DISPPARAMS argsAuth = { NULL,NULL,0,0 };
	argsAuth.rgvarg = new VARIANT[3];	
	argsAuth.cArgs = 3;
	VariantInit(argsAuth.rgvarg);
	argsAuth.rgvarg[0].vt = VT_BSTR;
	argsAuth.rgvarg[0].bstrVal = SysAllocString(L"");
	argsAuth.rgvarg[1].vt = VT_BSTR;
	argsAuth.rgvarg[1].bstrVal = SysAllocString(L"");
	argsAuth.rgvarg[2].vt = ???; // Какой тип данных должен быть
	argsAuth.rgvarg[2].       ???; // и как получить необходимый объект?
		
	hr = agentConnector->Invoke(dispIDAuthenticate, IID_NULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_METHOD, &argsAuth, &retAuth, NULL, &puArgErr);
Показать


Я перепробовал, наверное, пару десятков разных способов. И элементы из SAFEARRAY и VARIANT-ы разных компоновок, тем не менее, каждый раз Authenticate() сообщает, что тип данных параметра 2 (то есть первого, в С++ аргументы заталкиваются в обратном порядке) не подходит. Перечитал массу мануалов, но ничего так и не придумал. В примерах люди коннектятся к файловым базам, и с этим никаких вопросов не возникает. Может быть, у кого-нибудь есть пример кода для прохождения аутентификации на кластере или какие-то соображения на этот счёт?

TL/DR: Как в С++ получить подходящее для Authenticate() значение для параметра <Кластер>?
По теме из базы знаний
Ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
3. PRAGMA_ONCE 21.12.20 21:27 Сейчас в теме
(2)
У меня код практически идентичен тому, что по третьей ссылке, но
       args.rgvarg[0].vt = VT_BSTR;
       args.rgvarg[0].bstrVal = SysAllocString(OLESTR("File=\"C:\\base\";Usr=\"Администратор\"")); 

это коннект к файловой базе, как я и говорил.

Native API, вероятно, решит проблему, но кардинальным переписыванием кода, чего не хотелось бы делать.
Продолжаю поиски решения под OLE Automation.
4. ivan1703 78 23.12.20 11:07 Сейчас в теме
(3)
[COM]
Object=V83.COMConnector
ConnectStr=Srvr="1cSrv"; Ref="1c83_base"; usr="Import"; pwd="5555"
[DB]
ConnectString=Provider=SQLOLEDB.1;Password=1C;Persist Security Info=True;User ID=Export1C;Initial Catalog=APT;Data Source=lcl_test

вот пример ini со строками подключения под с++ все прекрасно цепляется

Вы com регали на сервере? чтобы его использовать
https://winrcmd.wordpress.com/2019/04/02/sozdaniye-com-soedineniya-1c/
статья в тему ...
5. ivan1703 78 23.12.20 11:10 Сейчас в теме
(3)
Дело конечно Ваше) но почему именно СОМ - "древний как гавно мамонта"))) запустите простой api с тащите любые данные из 1С, а если так сильно хочется можете даже на с++ кодить в vcpkg REST SDK - отличная штука
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)