Как упорядочить строку .NET в варианте для вызова COM

Я использую стороннюю библиотеку COM из C #.

Существуют методы get / set, которые принимают параметр типа VARIANT (тип VT_BSTR). В . NET обертка, эти параметры отображаются как тип object, т.е. е.

object getValue();
void setValue( object val );

Метод getValue работает нормально, я выполняю простое приведение объекта к строке:

string str = (string)comObject.getValue();

, но установка строки подобным образом не делает:

string str = "test";
comObject.setValue( str );

Сторонней библиотеке это не нравится и генерирует исключение. Должно быть, ожидается VARIANT типа VT_BSTR (как это работает с нативным C ++). Итак, мой вопрос, как мне создать один из них в C #?

Я смотрел на методы, подобные Marshal.GetNativeVariantForObject, но документация по правильному использованию этого кажется немного тонкой на местах, поэтому любой пример кода будет полезен.

вопрос задан 8.10.2009
user3891
3881 репутация

1 ответов


  • 3 рейтинг

    Используйте BStrWrapper класс:

    comObject.setValue(new BStrWrapper(str));
    
    ответ дан SLaks, с репутацией 663126, 8.10.2009