【C++犯错记录】 TCHAR 、WCHAR 、CHAR、string、basic_string<wchar_t>,MessageBox、_ConnectionPtr、HRESULT 在连接Access数据库是发生的问题

    // 连接Access数据库的代码 2020-8-23 21:45:07
    _ConnectionPtr p_connection;
    HRESULT hr_ado_db;
    try
    {
        hr_ado_db = p_connection.CreateInstance("ADODO.Connection");
        if (SUCCEEDED(hr_ado_db))
        {
            p_connection->ConnectionTimeout = 3;
            hr_ado_db = p_connection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source =D:\\Develop\\accessDB\\canyin.accdb", "", "", adModeUnknown);
        }
    }
    catch (const _com_error ex)
    {
        using namespace std;
        auto tmp = basic_string<wchar_t>(L"连接数据库错误信息:").append((WCHAR*)ex.ErrorMessage());
        ::MessageBox(NULL, tmp.c_str(), L"提示信息", NULL);
        return FALSE;
    }

https://blog.csdn.net/xukaiwen_2016/article/details/52078397  wchar_t和char,WCHAR和CHAR的区别和互相转化

https://blog.csdn.net/sky200543012/article/details/6306243  WCHAR,CHAR,TCHAR的区别

 

现在C++的字符分成两种类型wchar_t和char。  
其中   WCHAR==wchar_t,CHAR==char。  
TCHAR是一种条件编译的类型,根据条件可以代表wchar_t或char。  

CHAR实施上就是unsigned char,
WCHAR为宽字符,
而TCHAR根据是否支持unicode而不同。
在程序使用sizeof(TCAHR),当默认设置时,这个值是1;
当定义UNICODE宏时,这个值是2。 

 

WCHAR,CHAR,TCHAR的关系实际上是这样的  
   
#ifdef   UNICODE    
          typedef   wchar_t   TCHAR;    
#else    
          typedef   unsigned   char   TCHAR;    
#endif    
     
typedef   unsigned   char   CHAR;    
typedef   unsigned   wchar_t   WCHAR; 

 

posted @ 2020-08-23 22:27  德丽莎·阿波卡利斯  阅读(250)  评论(0编辑  收藏  举报