VS2022启用C++20标准后CComPtr、CA2W转换错误求助
修复VS2022启用C++20后ATL组件编译错误
错误1:IMsRdpDriveCollectionPtr 无法转换为 CComPtr
C++20标准对隐式转换的限制更严格,IMsRdpDriveCollectionPtr(ATL的_com_ptr_t智能指针实例)无法直接隐式转换为CComPtr。可以通过以下两种方式修复:
- 显式用原始指针初始化
CComPtr:CComPtr<IMsRdpDriveCollection> pdrivecollection(pnonscriptable->GetDriveCollection().GetInterfacePtr()); - 通过
Attach接管指针所有权:IMsRdpDriveCollectionPtr tempPtr = pnonscriptable->GetDriveCollection(); CComPtr<IMsRdpDriveCollection> pdrivecollection; pdrivecollection.Attach(tempPtr.Detach());
错误2:CA2W 无法转换为 CString
C++20下CA2W的隐式转换被限制,无法直接赋值给CString,可通过以下方式解决:
- 用
CA2W实例显式构造CString:CString fn(CA2W(filename, CP_UTF8)); - 显式转换为宽字符指针后赋值:
CA2W wstrConvert(filename, CP_UTF8); CString fn = static_cast<LPWSTR>(wstrConvert);
内容的提问来源于stack exchange,提问作者user3161924
相关产品推荐
相关产品推荐

