I’ve had to deal with a pointer of a BSTR string returned to an event handler of an ActiveX control. I wanted to convert it to LPCTSTR, and a simple implicit type-casting worked seamlessly when I tried in a test project.
void put_UseServer(LPCTSTR newValue);
void ServerChanged(BSTR* NewServer)
{
put_UseServer(*NewServer); // This conversion works only in Unicode Character Set
}
However, when I copied the same code into my actual project, it caused an error. The reason was that my project used the Multi-byte Character Set whereas I tested the code in the Unicode Character Set. The simplest solution I found which also works in the Multi-byte Character set is like the following.
void put_UseServer(LPCTSTR newValue);
void ServerChanged(BSTR* NewServer)
{
put_UseServer(COLE2CT(*NewServer)); // Use ATL String Conversion Class
}
More information about ATL and MFC String Conversion is on the MSDN website.