Что эквивалентно _bstr_t в C #

Я работаю над проектом, где мне нужно конвертировать код C ++ в C #.

Я наткнулся _bstr_t в коде я хотел бы знать, как эквивалент в C #.

2

Решение

_bstr_t учебный класс это обертка для BSTR тип. Это строка в OLE Automation это стандартизировано по языкам.

Тем не менее, эквивалентный тип в .NET является System.String.

Ключ заключается в том, что при взаимодействии с ним (или при определении ваших интерфейсов для взаимодействия COM в .NET-коде) вы захотите использовать MarshalAsAttribute со значением из UnmanagedType перечисление из UnmanagedType.BStr, вот так:

// This is on an interface that is in unmanaged code.
public void DoSomething([MarshalAs(UnmanagedType.BStr] string myString);

Обратите внимание, что если ваш класс на самом деле выставляет _bstr_t в интерфейсе COM, то вы должны изменить его, чтобы выставить BSTR; _bstr_t это вспомогательный класс, который не предназначен для показа через границы интерфейса. BSTR для этого и методы на _bstr_t предназначены для обработки распределения и использования BSTR экземпляров.

8

Другие решения

Если вы просто преобразование код, использовать string

Если ты взаимодействие с кодом C ++ через PInvoke, вы будете наверное отклонить параметр в виде строки и положить [MarshalAs(UnmanagedType.BStr)] перед объявлением параметра:

[DllImport("OldCLib.Dll")]
public static extern void PassBStr([MarshalAs(UnmanagedType.BStr)] string s);
0