When you call a COM method, it accepts BSTR in the following way:
Iface->f(L"")
L”” does not create a BSTR. This just creates a wide character string and if the string has to be marshalled to another apartment, the method will fail. Such usage will result in hard to find bugs wherein a method will succeed if it is called from same apartment and will fail otherwise.
Instead, use CComBSTR(L””), as in:
Iface->f(CComBSTR(L""))