Visual c++ 如何将PUNICODE_字符串转换为bstr?
我正在从VC++代码调用一个位于ComVisible托管dll中的函数。在托管dll中,函数参数类型为字符串 在VC++代码中,我将变量设置为PUNICODE\u字符串。如何将其传递给函数?如何将其转换为BSTR 多谢各位Visual c++ 如何将PUNICODE_字符串转换为bstr?,visual-c++,string,com-interop,Visual C++,String,Com Interop,我正在从VC++代码调用一个位于ComVisible托管dll中的函数。在托管dll中,函数参数类型为字符串 在VC++代码中,我将变量设置为PUNICODE\u字符串。如何将其传递给函数?如何将其转换为BSTR 多谢各位 NLV首先要注意的是,PUNICODE_字符串的内部字符串缓冲区可能不是以null结尾的。所以最好通过一个标准的以null结尾的宽字符串,然后可以直接传递给SysAllocString 试试这个: BSTR PUNICODEToBSTR(PUNICODE_STRING pSt
NLV首先要注意的是,PUNICODE_字符串的内部字符串缓冲区可能不是以null结尾的。所以最好通过一个标准的以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;
}
还有
SysAllocStringLen
可以避免以null结尾的复制感谢您的回复。但我没有把它作为指针变量。我把它作为PUNICODE\u STRING\u变量。现在如何转换?如果这是个愚蠢的问题,请原谅。我对VC++和Win32 API完全陌生。将第一行更改为(PUNICODE\u STRING pStr)
-无星-并将所有pStr.
更改为pStr->
-应该可以工作。也可以将BSTR*bstrString
更改为仅bstrString
。或者,一行程序BSTR bstrString=::SysAllocStringLen(pStr->Buffer,pStr->Length)
也应该可以工作。感谢您的评论。我将尝试它并让您知道。是的,Rup的一行程序很好地完成了这项工作!我将编辑我的代码,以便它对后代是正确的。