The two string types are not related at all. A transformation has to occur to convert one type to another.
A BSTR has a number of conventions that must be followed in including allocated via SysAllocString*, deallocated with SysFreeString, having a length prefix, and a terminator of two null characters.
http://msdn.microsoft.com/en-us/library/ms221069.aspx
A .Net string is a managed type that is allocated via the managed heap. It's lifetime is managed by the CLR garbage collector.
To construct your own BSTR, it would be much better to use Marshal.StringToBSTR:
http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.marshal.stringtobstr.aspx
If that's not good enough you can pinvoke SysAllocString:
http://msdn.microsoft.com/en-us/library/ms221458.aspx