如何将PUNICODE_STRING转换成bstr?

时间:2010-06-28 15:25:29

标签: visual-c++ string com-interop

我正在调用一个来自VC ++代码的ComVisible托管dll中的函数。在托管dll中,函数参数类型是字符串。

在VC ++代码中,我将变量改为PUNICODE_STRING。我怎样才能将它传递给函数?我如何将其转换为BSTR?

谢谢。

NLV

1 个答案:

答案 0 :(得分:1)

首先要注意的是PUNICODE_STRING的内部字符串缓冲区可能不是以空值终止的。因此,最好通过一个标准的以null结尾的宽字符串,然后可以直接传递给SysAllocString。

试试这个:

BSTR PUNICODEToBSTR(PUNICODE_STRING pStr)
{
    // create a null-terminated version of the input string
    wchar_t* nullTerminatedString = new wchar_t[pStr->Length + 1];
    memset(nullTerminatedString, 0, sizeof(wchar_t) * (pStr->Length + 1)];
    wcsncpy(nullTerminatedString, pStr->Buffer, pStr->Length);

    // create a BSTR
    BSTR bstrString = ::SysAllocString(nullTerminatedString);

    // tidy-up and return the BSTR
    delete [] nullTerminatedString;
    return bstrString;
}