->AddTree ( and most COM object methods ) expect a BSTR string which will you can create and need to be release to prevent a memory leak. You could use something such as...
// allocate a bstr string
BSTR bstrPictures = SysAllocString(L"C:\\Pictures");
// use it
res = root -> AddTree(bstrPictures, VARIANT_TRUE);
printf("6 %08X\n", res);
// free the bstr string
SysFreeString(bstrPictures);
Although BSTR can be used in place of a 'wide char string', the reverse is not always true. A BSTR has extra data in front of the actual character data, hence the functions required to manipulate them.
Try not to get into a bad habit of using them like this...
res = root -> AddTree(SysAllocString(L"C:\\Pictures"), VARIANT_TRUE);
as you will have a memory leak.
Have fun.