Я работаю над проектом, где мне нужно конвертировать код C ++ в C #.
Я наткнулся _bstr_t
в коде я хотел бы знать, как эквивалент в C #.
_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
экземпляров.
Если вы просто преобразование код, использовать string
Если ты взаимодействие с кодом C ++ через PInvoke, вы будете наверное отклонить параметр в виде строки и положить [MarshalAs(UnmanagedType.BStr)]
перед объявлением параметра:
[DllImport("OldCLib.Dll")]
public static extern void PassBStr([MarshalAs(UnmanagedType.BStr)] string s);