В чем разница между строкой COM (BSTR) и строкой .NET? - PullRequest
5 голосов
/ 21 июня 2011

Это просто способ объединения байтов для "кодирования" данных?

Мне любопытно, потому что мне интересно, как RCW автоматически берет строку .NET и преобразует ее в COM BSTR. Я предполагаю, что он просто формирует действительный COM BSTR, преобразованный из строки .NET.

Связанный: Могу ли я создать свой собственный действительный BSTR, используя тип байта в .NET?

1 Ответ

9 голосов
/ 21 июня 2011

Два типа строк вообще не связаны.Необходимо преобразование, чтобы преобразовать один тип в другой.

BSTR имеет ряд соглашений, которым необходимо следовать, в том числе выделенных через SysAllocString *, освобожденных с помощью SysFreeString, имеющих префикс длины и терминатор из двух нулевых символов.http://msdn.microsoft.com/en-us/library/ms221069.aspx

.Net-строка - это управляемый тип, который выделяется через управляемую кучу.Его временем жизни управляет сборщик мусора CLR.

Для создания собственного BSTR было бы гораздо лучше использовать Marshal.StringToBSTR:

http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.marshal.stringtobstr.aspx

Если этонедостаточно хорошо, вы можете вызвать SysAllocString:

http://msdn.microsoft.com/en-us/library/ms221458.aspx

...