新建ATL项目后,选择使用多字节字符集,然后编译,就编译不通过
STDAPI DllInstall(BOOL bInstall, LPCWSTR pszCmdLine)
{
    HRESULT hr = E_FAIL;
    static const wchar_t szUserSwitch[] = _T("user"); //“初始化”: 无法从“const char [5]”转换为“const 
                                                       //  wchar_t []”    if (pszCmdLine != NULL)
    {
     if (_wcsnicmp(pszCmdLine, szUserSwitch, _countof(szUserSwitch)) == 0)// 未能使函数模板//“char (*__countof_helper(_CountofType (&)[_SizeOfArray]))[_SizeOfArray]”专用化
     {
     AtlSetPerUserRegistration(true);
     }
    }    if (bInstall)
    {
     hr = DllRegisterServer();
     if (FAILED(hr))
     {
     DllUnregisterServer();
     }
    }
    else
    {
     hr = DllUnregisterServer();
    }
    return hr;
}
我什么都还没干,这是什么原因,是ATL不支持多字节吗?

解决方案 »

  1.   

    你用多字符集,那么这里就要用单字节
     static const char szUserSwitch[] = _T("user"); 
      

  2.   

    你选了多字节
    但中间都用宽字节
     static const wchar_t szUserSwitch[] = _T("user"); //“初始化”: 无法从“const char [5]”转换为“const 
    if (_wcsnicmp(pszCmdLine, szUserSwitch, _countof(szUserSwitch)) == 0)// 未能使函数模板 
      

  3.   

    static const TCHAR szUserSwitch[] = _T("user");
      

  4.   

    static const wchar_t szUserSwitch[] = _T("user"); 
    ------->
    static const TCHAR szUserSwitch[] = _T("user"); 

    static const wchar_t szUserSwitch[] = L"user"; 
      

  5.   

    那这个_wcsnicmp(pszCmdLine, szUserSwitch, _countof(szUserSwitch)) == 0 要怎么 改啊?
      

  6.   

    vs2005编译器默认的字符集是unicode,你依然用系统默认生成的,就最好用unicode字符集