Am Thu, 19 Dec 2013 17:36:57 +0000 schrieb Richard Webb <richard.w...@boldonjames.com>:
> On 18/12/2013 20:48, Andre wrote: > > => myURL.bstrVal = SysAllocString(cast(const(wchar*))url); > > > Looks like the problem there is casting a string to a wchar* - I guess > the resulting BSTR will contain garbage instead of the intended value. > > > > > > It only works with statement: > > myURL.bstrVal = cast(wchar*)"http://www.google.de"; > > > > > Treating a wchar* as a BSTR might cause unexpected things to happen - > converting the string to a wchar* and then passing that to > SysAllocString would be safer. Oh yes, you are right and I was totally ignorant of what a BSTR is! It is a data structure for strings consisting of size prefix for the character data (4 bytes), the character data as wchars and a terminating zero wchar. So your first approach was correct: string url = …; BSTR* bstrUrl = enforce(SysAllocString(toUTFz!(const(wchar)*)(url)), "Out of memory or url is null"); myURL.bstrVal = bstrUrl; … SysFreeString(bstrUrl); -- Marco