我正在调用一个来自VC ++代码的ComVisible托管dll中的函数。在托管dll中,函数参数类型是字符串。
在VC ++代码中,我将变量改为PUNICODE_STRING。我怎样才能将它传递给函数?我如何将其转换为BSTR?
谢谢。
NLV
答案 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;
}