std :: string到LPOLESTR

Mic*_*ble 2 c++ string com ole

我有一个像这样的字符串数组:

using std::string;
string myArray[] = { string("abc"), string("foo"), string("muh") };
Run Code Online (Sandbox Code Playgroud)

现在我想使用这个功能:

HRESULT Init(T* begin, T* end, IUnknown* pUnk, CComEnumFlags flags = AtlFlagNoCopy );
Run Code Online (Sandbox Code Playgroud)

T在我的情况下是LPOLESTR.所以我需要将std :: string数组分别转换为LPOLESTR我需要一个LPOLESTR*来开始和结束这个数组.怎么做的?

Thx提前

era*_*ran 6

ATL有一用于字符串转换的宏.在您的情况下,您可以使用:

LPOLESTR olestr = A2OLE(std_str.c_str());
Run Code Online (Sandbox Code Playgroud)

请注意,OLESTR基本上是一个wchar_t*,所以如果你使用std :: wstring(或宽字符串字符串),你甚至不需要宏:

LPOLESTR olestr = std_wstr.c_str();
Run Code Online (Sandbox Code Playgroud)

  • 我知道这是一篇旧文章,但我也尝试将 std::string 转换为 LPOLESTR,当我尝试此代码时,我得到“标识符 _lpa 未定义”。我已经包含了 atlbase.h 和 atlconv.h。另外,在您链接的文档中,据我所知,它看起来像 A2OLE 旨在将 LPSTR 转换为 LPOLESTR (这就是我们使用 c_str 的原因吗?)。我对 C++ 完全陌生,所以如果我遗漏了一些明显的东西,请原谅,我将不胜感激任何帮助,谢谢。 (2认同)
  • @rhowell - 自从我写下答案以来,我就没有接触过 COM 的东西,所以可能也遗漏了一些东西。“_lpa”错误可以通过在使用转换宏之前添加“USES_CONVERSION”宏来解决(yuk!)。一般来说,这些宏在宽字符和常规字符之间进行转换。ATL 字符串类型取决于构建 (Unicode/ascii),因此与常规 C/C++ 类型(不依赖于构建)的转换也必须依赖于构建。`c_str()` 用于获取原始 C 字符串,即指向 chars 数组的指针,因为这些宏不适用于 C++ std::string 对象。 (2认同)