Return type in COM is always HRESULT (except special methods AddRef and Release), so you need to use out
parameter:
HRESULT GetString([out] BSTR* val);
Also you can add retval
attribute to turn the output parameter into the return value for script languages (that uses IDispatch):
HRESULT GetString([out, retval] BSTR* val);