如何将char*转换为const OLECHAR*以便在SYSALLOCSTRING()中使用

How to convert char * to const OLECHAR * so as to be used in SYSALLOCSTRING()?

本文关键字:SYSALLOCSTRING OLECHAR char 转换 const      更新时间:2023-10-16

请告诉我如何使用诸如SysAllocString()中的char*xyz,它将OLECHAR const*作为参数

根据char*的编码方式,您有一些不同的选项:

  1. 是Windows所称的ANSI字符串,可以使用ATL和MFC字符串转换宏。

    BSTR foo(const char* s) {
      return SysAllocString(CA2W(s)); // CA2W requires <atlconv.h>
    }
    

    或者您可以使用_bstr_t:

    BSTR foo(const char* s) {
      return _bstr_t(s).Detach();
    }
    
  2. 如果是UTF-8,则可以使用MultiByteToWideChar

要将char*转换为const OLECHAR*,可以使用宏A2COLE

所以,如果你有一个"char*pChar",应该可以这样做:

const OLECHAR* pOleChar = A2COLE( pChar );
BSTR str = SysAllocString( pOleChar );
// do something with the 'str'
SysFreeString( str ); // need to cleanup the allocated BSTR

这就像wchar_t一样,所以您可以简单地调用函数:
SysAllocString(L"你好")
或者,如果您有char*,请使用mbstowcs_s将其转换为wchar_t。