如何将 PUNICODE_STRING 转换为 bstr?

发布于 2024-09-07 07:27:01 字数 159 浏览 3 评论 0原文

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

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

谢谢。

自然LV

I'm calling a function which is in a ComVisible managed dll from a VC++ code. In the managed dll the function parameter type is string.

In the VC++ code i've the variable as PUNICODE_STRING. How can i pass it to the function? How can i convert it into BSTR?

Thank you.

NLV

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

黯然 2024-09-14 07:27:01

首先要注意的是 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;
}

The first thing to note is that PUNICODE_STRING's internal string buffer might not be null-terminated. So it would be best to go via a standard null-terminated wide string, that can then be passed straight to SysAllocString.

Try this:

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;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文