私はCOM dllに取り組んでいます。BSTR を std::string に変換して、const 参照パラメーターを受け取るメソッドに渡したいと考えています。
_com_util::ConvertBSTRToString() を使用して、BSTR に相当する char* を取得するのが適切な方法のようです。ただし、API ドキュメントはまばらであり、実装にはバグがある可能性があります。
http://msdn.microsoft.com/en-us/library/ewezf1f6(v=vs.100).aspx http://www.codeproject.com/Articles/1969/BUG-in-_com_util-ConvertStringToBSTR-and- _com_util
例:
#include <comutil.h>
#include <string>
void Example(const std::string& Str) {}
int main()
{
BSTR BStr = SysAllocString("Test");
char* CharStr = _com_util::ConvertBSTRToString(BStr);
if(CharStr != NULL)
{
std::string StdStr(CharStr);
Example(StdStr);
delete[] CharStr;
}
SysFreeString(BStr);
}
できれば標準のメソッドとクラスに基づいて、ConvertBSTRToString() を使用する代わりの方法の長所と短所は何ですか?