根据一些较早的 StackOverflow 问题(Unable to pass std::wstring across DLL , C++ DLL returned pointer to std::list<std::wstring>),C++ DLL 返回 a 被认为是不安全的,std::wstring
因为不能保证 main程序具有相同的定义,std::wstring
因此可能会导致崩溃。
但是,在http://en.cppreference.com/w/cpp/string/basic_string中,它现在似乎std::wstring
可以与WCHAR
数组互换使用:
(C++11 起)basic_string 的元素是连续存储的,也就是说,对于 basic_string s,&*(s.begin() + n) == &*s.begin() + n 对于任何 n 在[0, s.size()),或者等效地,指向 s[0] 的指针可以传递给期望指向 CharT[] 数组的第一个元素的指针的函数。
我已经通过传递&s[0]
给期望WCHAR*
缓冲区的 WINAPI 函数对此进行了测试,并且它似乎可以工作(std::wstring
正确填充了 WINAPI 的结果)。因此,既然std::wstring
现在显然可以像WCHAR
数组一样对待,我决定重新审视这个问题:可以std::wstring
从 DLL 安全地返回 a 吗?为什么或者为什么不?