根据MSVC++中的unicode设置自动在std :: string和std :: wstring之间切换?

Fel*_*bek 7 c++ string unicode unicode-string

我正在编写DLL并希望能够在MSVC++ 2010中的unicode和multibyte设置之间切换.例如,我使用_T("string")and LPCTSTRWIN32_FIND_DATA不是-W和-A版本等.

现在,我想有性病::字符串之间变化std::string,并std::wstring根据统一设置.那可能吗?否则,这可能会变得非常复杂.

bdo*_*lan 12

为什么不像Win32 API那样:在内部使用宽字符,并提供DoSomethingA函数的字符转换外观,只需将其输入转换为Unicode.

也就是说,您可以定义tstring类似的类型:

#ifdef _UNICODE
typedef std::wstring tstring;
#else
typedef std::string tstring;
#endif
Run Code Online (Sandbox Code Playgroud)

或者可能:

typedef std::basic_string<TCHAR> tstring;
Run Code Online (Sandbox Code Playgroud)

  • 请注意,您也希望对iostream类型执行相同的操作; 例如,而不是使用`std :: fstream`,为`std :: basic_fstream <TCHAR>`创建一个typedef并使用它. (2认同)
  • @Felix:没有"窄"BSTR这样的东西 - 根据定义,BSTR总是UTF-16. (2认同)
  • Windows上的BSTR总是16位:http://msdn.microsoft.com/en-us/library/ms221069.aspx (2认同)
  • 如果将VB6中的函数声明为带有`String`参数,则VB6的UTF-16字符串将在调用期间转换为"ANSI"字符串.将参数声明为`ByVal ... As Long`,并传递`StrPtr`,然后传递指向原始UTF-16数据的指针. (2认同)