描述:
我做了一个控件,需要去得一个结果
STDMETHODIMP CEKEY::get_UserID(BSTR* pVal)
{
// TODO: 在此添加实现代码
*pVal=(BSTR)readFile();
return S_OK;
}
STDMETHODIMP CEKEY::put_UserID(BSTR newVal)
{
// TODO: 在此添加实现代码
return S_OK;
}
可是在JS中得到的值是乱码
如果改成:
STDMETHODIMP CEKEY::get_UserID(BSTR* pVal)
{
// TODO: 在此添加实现代码
*pVal=(BSTR)"FF";
return S_OK;
}
得到的也同样是乱码。
各位大哥大姐,救救我吧。
STDMETHODIMP CEKEY::put_UserID(BSTR newVal)
{
// TODO: 在此添加实现代码
return S_OK;
}
解决方案1:
sorry ,那是我自己的代码。
int VariantTool::bstr2ansi(BSTR bStr, char * pStr, int nLen)
{
int nRet = 0;
int nbstrlen = ::SysStringLen(bStr);
if (nLen < (nbstrlen<<1))
nRet = -1;
else if (nbstrlen == 0)
nRet = 0;
else
nRet = ::WideCharToMultiByte(CP_ACP,0,bStr,nbstrlen,pStr,nLen,NULL,NULL);
return nRet;
}
int VariantTool::ansi2bstr(char * pStr, BSTR * pbStr)
{
int nRet = 0;
int nSrclen = ::strlen(pStr);
if (nSrclen != 0)
{
int nDeslen = (nSrclen+1) * sizeof(WCHAR);
*pbStr = new WCHAR [nDeslen];
::ZeroMemory(*pbStr,nDeslen);
nRet = ::MultiByteToWideChar(CP_ACP,MB_COMPOSITE | MB_USEGLYPHCHARS,pStr,::strlen(pStr),*pbStr,nDeslen);
}
return nRet;
}
用 VariantTool::bstr2ansi 转换一下