Я изучаю Статья Microsoft об автоматизации OLE .Насколько я понимаю, функция AutoWrap используется для вызова внешних методов, получения / установки свойств.
Давайте попробуем понять код, вызывающий эту функцию:
//Make it visible (i.e. app.visible = 1)
{
//parameter preparation
VARIANT x;
x.vt = VT_I4;// type of parameter
x.lVal = 1;// value
AutoWrap(
DISPATCH_PROPERTYPUT, // set property
NULL, // we need no result
pXlApp,// pointer to Excel app
L"Visible",// "Visible" property
1,// 1 argument passed
x//passed argument
);
}
Что я не понимаютакое структура x:
- Что такое
x.vt = VT_I4
?Вероятно, это обозначает тип аргумента.Когда они передают массив в качестве параметра, они записывают это:
VARIANT arr;
arr.vt = VT_ARRAY | VT_VARIANT;
Похоже на битовую маску.
x.lVal = 1;
- это означает, что мы передаем целое число 1 в функцию Visible.Но какие свойства должны использоваться для каждого типа аргумента?Я видел "lVal" и "bstrVal" в статье.Для параметра массива это "parray":
VARIANT arr;
//...
arr.parray = SafeArrayCreate(VT_VARIANT, 2, sab);
Если нам нужно вызвать функцию с несколькими параметрами, скажем: MyFun (xy), нам нужно передать их в обратном порядке:
VARIANT x;
x.vt = VT_I4;
x.lVal = 1;
VARIANT y;
x.vt = VT_I4;
x.lVal = 2;
AutoWrap(
DISPATCH_METHOD, NULL, pXlApp, L"MyFun", 2, y, x
);
Где я могу найти правила построения параметров для любого вызова функции?
Я прав в своих исследованиях?