Разбирая вопрос с f([in,defaultvalue("")] BSTR s), столкнулся с такой проблемой.
f([in,ref,defaultvalue("")] BSTR s)
f([in,ptr,defaultvalue("")] BSTR s)
f([in,unique,defaultvalue("")] BSTR s)
транслируются в почти одинаковые TLB и _p.c для прокси.
Почти, потому как в TLB — это 1 байт: для ref 0x12, для ptr 0x5E, для unique 0xE7, а в _p.c — 1 строка с датой компиляции. Поэтому эта разница может быть вообще связано с датой компиляции.
Причём, OLEView не показывает эти ключи при просмотре TLB, да и в описаниях ITypeXXXX интерфейсов я не нашёл констант, связанных с этим делом.
Однако MSDN для MIDL утверждает, что эти ключи характеризуют разные по поведению при передаче и при выделении/освобождении памяти и т.п указатели.
Так в чём отличия ptr, ref и unique для маршаллинга? И как об этом узнаёт прокси?
Кто прольёт свет на этот вопрос?