Как я могу использовать объекты.NET из Excel VBA?

Это не существует как таковое в языке.

Одним из вариантов является вычисляемое вспомогательное свойство:

struct S {
    let i: Int
    let b: Bool
}

extension S {
    var destructured: (Int, Bool) {
        return (self.i, self.b)
    }
}

let s = S(i: 10, b: false)
let (i, b) = s.destructured

Конечно, вы должны вручную синхронизировать его. Возможно, Sourcery мог бы помочь с этим.

8
задан Community 9 July 2018 в 18:41
поделиться

2 ответа

Я думаю, что Andy закрепил этот ответ, но я не уверен, что аспект относительно правил загрузки CLR является точно правильным.

Блок.NET, который содержит класс, действующий как обертка для GZipStream, был бы выставлен COM и зарегистрирован точно так же, как любая другая библиотека проекта COM и класс. В этом отношении VBA нашел бы местоположение COM-выставленного блока.NET с помощью реестра. Могло бы быть умно поместить блок в GAC, так, чтобы это не могло переместиться (так как перемещение блока делало бы недействительным информацию о реестре), но пока реестр указывает на правильное место, это должно быть прекрасным.

Учебное руководство хорошего новичка на предмете здесь

Надеюсь, это поможет...

11
ответ дан 5 December 2019 в 12:14
поделиться

VBA может использовать любые объекты.NET, которые выставляются COM. Я не знаю, ли GZipStream или нет, но я предположил бы, что для Вас было бы легче создать отдельный объект.NET, который является оберткой вокруг функциональности GZipStream, который Вы хотите использовать. Можно затем выставить объект COM, и затем VBA должен использовать его.

Обратите внимание, что блок, содержащий Ваш COM-объект (и его библиотека типов также, я думаю, хотя я не положителен относительно этого), должен или быть в том же каталоге как основной исполняемый файл (winword.exe, или безотносительно) или в GAC. Это происходит из-за правил загрузки CLR для блоков.

3
ответ дан 5 December 2019 в 12:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: