在Excel XLOPER中通过char *返回日文字符

我正在从数据源中检索日文字符,并且希望将这些数据返回到XLOPER中的Excel中。 我正在使用日语版本的Excel 2003(因此XLOPERs而不是XLOPER12s)。

wchar_t* pszW = OLE2W(bstrResult); //I have the data I am trying to copy in a CComBSTR ULONG ulSize = ::WideCharToMultiByte( CP_THREAD_ACP, 0, pszW, -1, NULL, 0, NULL, NULL ); if ( ulSize ) { char* tmp = new char[ulSize + 1]; tmp[ulSize]='\0'; ::WideCharToMultiByte( CP_THREAD_ACP, 0, pszW, -1, LPSTR( tmp ), ulSize, NULL, NULL ); pszReturn = tmp; } wchar_t* pwszOut = new wchar_t[bstrResult.Length () + 1]; //now turn it back to test that that the correct code page was used. For debugging purposes only! ::MultiByteToWideChar (CP_THREAD_ACP,0, LPSTR(pszReturn),-1,pwszOut,bstrResult.Length () + 1); //pwszOut and bstrResult look the same in the debugger delete [] pwszOut; 

参数pszReturn被分配给一个XLOPER。 我有一个问题,就是在“Excel”中显示“フリカの女王”为“アディカー女”。

手动将代码页设置为932会得到与CP_THREAD_ACP相同的结果,所以我认为该部分是正确的。

任何帮助将不胜感激。

用户错误!

上面的代码是好的。 问题是Excel正在使用错误的代码页。 我没有在控制面板中将非Unicode程序的语言设置为日语。

该代码现在也适用于英文版的Excel。

那花了一天半的时间…

char *是一个字节序列,使用当前字符集进行解释。 要做好准备,那就是解释党所使用的字符集。 在这种情况下,Execl正在接收应该使用代码页932进行解释的字符集,而Excel正在使用另一个代码页。

在XLOPER12代表的Excel中,解决scheme始终是Unicode