Открываю новое приложение в C++ Builder 6. Беру произвольный, первый попавшийся ActiveX из тех, что есть на компьюторе. В данном случае это из папки System32 под названием vsf132.ocx Загружаю его в OleConteiner.
void __fastcall TForm1::Button1Click(TObject *Sender)
{
OleContainer1->CreateObject("VCF1.VCF1Ctrl.1",false);
OleContainer1->DoVerb(ovShow);
}
Просмотрев библиотеку типов этого vsf132.ocx пытаюсь вызвать его метод с двумя параметрами long.
[
propput,
id(0x00000115),
helpstring("Returns the number of the last occupied column for the specified row."),
helpcontext(0x00000807)
]
void LastColForRow(long nRow, long Param2 );
Вызов:
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Variant par1;
Variant par2;
long v1 = Edit1->Text.ToInt();
long v2 = Edit2->Text.ToInt();
par1.vt = VT_I4;
par1.iVal = v1;
par2.vt = VT_I4;
par2.iVal = v2;
TAutoArgs<2> args;
args[1] = par1;
args[2] = par2;
Form1->OleContainer1->OleObject.OlePropertySet("LastColForRow",static_cast<TAutoArgsBase&>(args));
}
Исключение 'Ошибка' на последней строке. Как исправить?
Пробую так:
TAutoArgs<2> args;
args[1] = Variant(Edit1->Text.ToInt());
args[2] = Variant(Edit2->Text.ToInt());
Form1->OleContainer1->OleObject.OlePropertySet("LastColForRow",static_cast<TAutoArgsBase&>(args));
Тоже не работает. Исключение 'Ошибка'.
Интересно, что для этого метода не работает даже такое:
Form1->OleContainer1->OleObject.OlePropertySet("LastColForRow",Variant(2),Variant(3));
Получаю исключение 'Ошибка' и курсор мыши поподает сюда:
template <class P1, class P2>
void Variant::OlePropertySet(const String& name, P1 p1, P2 p2)
{
TAutoArgs<2> args;
args[1] = p1; args[2] = p2;
OlePropertySet(name, static_cast<TAutoArgsBase&>(args)); //здесь!
}
Как правильно передать два параметра long в моем случае?
Спасибо.