3

このコードはWindows7では機能しますが、Windows XPでは機能しません(スタートアップフォルダーパスの一部のみを出力します)

#include <iostream>
#include <shlobj.h>

using namespace std;
int main()
{
    wchar_t startupFolder[1024];
    HRESULT hr = SHGetFolderPath(0, CSIDL_STARTUP, 0, 0, startupFolder);
    if (SUCCEEDED(hr))
        wcout << L"Startup folder = " << startupFolder << endl;
    else
        cout << "Error when getting startup folder\n";
    getchar();
    return 0;
}

出力は次のとおりです。スタートアップフォルダ=C:\ Documents and Settings \ Admin\<-カーソルはここにあります。改行は提供されません。また、私はロシアのウィンドウxpを持っています。これはUnicodeの問題だと思います。

wprintfを使用すると、C:\ Documents and Settings \ Admin \ ???????? ....。

ありがとう。

4

1 に答える 1

3

問題は、XPコンソールが使用するフォントに、出力しようとしているロシア語の文字のグリフが含まれていないことです。Windows 7に同梱され、コンソールでデフォルトで使用されるフォントは、Unicodeコードポイントの範囲がはるかに広くなっています。必要なグリフを含むフォントを使用するようにコンソールを構成する必要があります。

于 2012-04-08T11:27:02.967 に答える