This article:
https://limbioliong.wordpress.com/2011/06/16/returning-strings-from-a-c-api/

Hints that the interop marshaller takes ownership of the returned string
and will delete the buffer. If this is true, then it's pretty smart and
invalidates our concerns about a possible leak. I'm reading more and
running some experiments -- *GK*

On 24 October 2017 at 16:28, Tony McGee <tmcgee...@gmail.com> wrote:

> My understanding would be that either the caller allocated a large enough
> buffer and passes it to the library in which case the callee does a copy
> and doesn't need to worry about it
> -or- the callee keeps the pointer they've given out and expects the caller
> to pass it back to another function to do the free/dealloc.
>
> I believe there's standard functions for allocating things like BSTR's
> from the COM days (SysAllocString/SysFreeString) where the callee allocates
> and the caller is responsible for deallocation but passing out raw wchar_t
> pointers without agreeing on a deallocation method isnt great.
>
> On 24 Oct 2017 15:14, "Greg Keogh" <gfke...@gmail.com> wrote:
>
>> Folks, my REST web service makes calls to C++ functions in a native DLL.
>> The functions return wchar_t* which I marshal into a managed string.
>>
>> The author of the C++ code doesn't know when to free the buffer he's
>> allocated for the string (neither do I). The very last statement in his
>> function is return char_ptr, so the function ends and the buffer becomes a
>> leak. I consume the pointer after his function ends, so when can he delete
>> it?
>>
>> Is there some trick I'm forgetting? Or are we doing it the wrong way?
>>
>> *Greg K*
>>
>

Reply via email to