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.
1 2 3 4 5 6 | 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.
1 2 3 4 5 6 | 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.