Это делается так:
X++:
static void oo_4(Args _args)
{
COM OpenOffice;
COM DeskTop;
COM Document;
COM MyStruct;
str filepath;
// аргумент для вызова методов через диспатч
COMVariant varArg1 = new COMVariant();
// аргумент для массива свойств
COMVariant var = new COMVariant();
// Это для того, чтобы вызывать диспатчевые методы
// а конкретно - аксапта часто не умеет ставить значения пропертям
// и приходится вот так.
ComDispFunction Func;
// аргумент для всяких методов
COMVariant arg;
// иногда нужен массив свойств
Array arr = new Array(Types::Class);
// Создание экземпляра OpenOffice.org
OpenOffice = new Com("com.sun.star.ServiceManager");
DeskTop = OpenOffice.CreateInstance("com.sun.star.frame.Desktop");
// получаем объект, в котором хранится свойство (для передачи в функцию)
MyStruct = OpenOffice.Bridge_GetStruct("com.sun.star.beans.PropertyValue");
Func = new COMDispFunction(MyStruct, "Name", COMDispContext::PropertyPut);
varArg1.bStr("AsTemplate");
Func.call(varArg1);
Func = new COMDispFunction(MyStruct, "Value", COMDispContext::PropertyPut);
varArg1.boolean(true);
Func.call(varArg1);
var = COMVariant::createFromCOM(MyStruct);
arr.value(1,var);
// Создание документа
// create and initialize a COMVariant object
arg = COMVariant::createFromArray(arr);
filepath = "file://///Axapta-aos/Шаблоны/Претензии.xlt";
Document = DeskTop.LoadComponentFromURL(filepath, "_blank", 0, arg);
}