To rh:
BSTR和OLECHAR* 在C++的类型中是兼容的,但不同的是BSTR在第一个字符以前有4个字节用于表示字符串的长度。
int StringFromGUID2(REFGUID rguid, LPOLESTR lpsz, int cchMax);
如果cchMax的参数不是39而是50(足够大就可),那么如果这个函数中使用wcscpy实现的(不会修改头部长度),那么这个BSTR的头部的字符串长度和其实际长度(0x00结尾的串)有可能不符合,我不知道会有什么后果(如内存泄漏),当然用39做参数也许可行。
所以我认为BSTR和LPOLECHAR不一定兼容很好,如果参数要求用LPOLECHAR那么我是不会传BSTR的。