передача LPWSTR по ссылке
Но вы этого не делаете ...
void funcA(wchar_t* data); // LPWSTR resolved to what it actually is
// using correct pointers illustrates better
// than Microsoft's (valueless?) pointer typedefs...
Исходный указатель, который вы передаете, скопирован в аргумент функции, затем происходит присвоение этой копии.
Вам действительно нужно иметь возможность назначить внешний адрес, поэтому вам нужно сделать то, что вы уже описали:
void funcA(wchar_t*& data); // reference to pointer
// ^ (!)
{
wchar_t const* newData = L"DEMODATA"; // literals are const!
data = new wchar_t[9]; // you can assign directly (especially: no need for memcpy)
wmemcpy(data, newData, 9);
}
Просто для дальнейшей иллюстрации, может помочь лучше понять: указатель стиля C на указатель:
void funcA(wchar_t** data); // pointer to pointer
// ^
{
wchar_t* newData = new wchar_t[9];
wmemcpy(newData, L"DEMODATA", 9);
*data = newData;
// ^ (!)
};
Использование этого варианта:
wchar_t* text;
funcA(&text);
// ^ (!)