Если кому интересно, прототип функции IDL выглядит примерно так
X++:
HRESULT _stdcall LinkTest([out] VARIANT * vfCptModel, [out, retval] int * Ret );
Вся фишка здесь в типе параметра VARIANT *, т.е. необходимо передавать ссылку на вариантный тип
Если бы использовалась просто строка
X++:
HRESULT _stdcall LinkTest([out] BSTR * vfCptModel, [out, retval] int * Ret );
, то можно было бы просто передавать в вызов функции переменную var1 из предыдущего примера
X++:
ComVariant var1 = new ComVariant(ComVariantInOut::out, ComVariantType::VT_BSTR);
;
...
res = com.LinkTest(var1);
data = var1.bStr();
info(data);