Для данного случая не проверял, но как правило ВСЕ переменные (за некоторым исключением) в COM-интерфейс надо передавать "обернутыми" в ComVariant. Иначе последствия трудно предсказуемые
X++:
PictRes = InShape.AddOLEObject(COMVariant::createFromStr("htmlfile"),
COMVariant::createFromStr(FileName),
COMVariant::createFromBoolean(LinkToFile),
COMVariant::createFromBoolean(DisplayAsIcon),
COMVariant::createFromStr(IconFileName),
0, // Не уверен, что здесь нужно число, а не COMArgument::NoValue
COMVariant::createFromStr("Pict")
);