Or one 'old world' technique some win APIs use
Pass in a null and the call tells you what size buffer you need, create it
and pass it in on a second call.


Mike

On Tue, Nov 26, 2019, 11:53 Tony McGee <tmcgee...@gmail.com> wrote:

> You could return a BSTR and let the interop marshaling do clean up for
> you:
>
>
> https://www.codeproject.com/Articles/1189085/Passing-strings-between-managed-and-unmanaged-code
>
>
>
> On Tue, 26 Nov. 2019, 11:09 Greg Keogh, <gfke...@gmail.com> wrote:
>
>>
>> msg is a stack variable, you can't return it iirc. Either create a var on
>>> the heap, or pass  msg in as a parameter.
>>>
>>
>> D'oh! You're right. I changed the code to the following and it's working.
>> Notice use of CoTaskMemAlloc, which I think is the least worst choice of
>> heap allocation functions according to the MSDN docs.
>>
>> Notice that I've completely forgotten what the lengths are supposed to be
>> for string lengths, is it x2 for wchar? is it correct to allocate 200 bytes
>> for 100 wchars? The compiler is giving me an overrun warning. You're
>> supposed to use sizeof or something like that, but my brain has gone mushy
>> on all those rules now (which is part of the reason I never want to code
>> this assembler crap again!).
>>
>> Even worse … what about the memory leak in CoTaskMemAlloc? I make the
>> buffer, copy in the string and return it, but it's now leaked. Should I use
>> a global static buffer that can be released later? When?
>>
>> *GK*
>>
>> [image: image.png]
>>
>>
>>

Reply via email to