23

次のように、TCHAR を文字列に変換しようとしています。

std::string mypath;
TCHAR path[MAX_PATH];
GetModuleFileName( NULL, path, MAX_PATH );

のそれに設定mypathする必要がありpathます。私は単純なループを実行して連結path[index]しましたがmypath、これは機能しますが、この方法は好きではありません。

私は C++ を初めて使用しますが、多くの C# を実行しました。「char」を渡す例を見てきましたGetModuleFileNameが、それは好きではありません。TCHARまたはが必要LPWSTRです。

4

5 に答える 5

25

TCHAR は、文字セットの定義内容に応じて、char または wchar として定義されるマクロです。2008 年以降のデフォルトでは、文字が Unicode に設定されています。このコードは、文字セットを変更すると機能します。

int _tmain(int argc, _TCHAR* argv[])
{
    TCHAR* bob ="hi";
    string s = bob;    
}

プロジェクト設定を右クリックし、次のように変更します

ここに画像の説明を入力

TCHAR を Unicode 文字セットとして使用する場合は、wstringを使用します

于 2011-05-15T03:53:18.207 に答える
14

が本当にそれをする必要があるとき、私は以下を使用します:

TCHAR  infoBuf[32767];
GetWindowsDirectory(infoBuf, 32767);

そして、それを標準に変換できる wstring に変換しますstd::string

wstring test(&infoBuf[0]); //convert to wstring
string test2(test.begin(), test.end()); //and convert to string.
于 2015-01-27T18:16:41.710 に答える
8

文字でパスが必要な場合は、 を呼び出す必要がありますGetModuleFilenameA。その関数はLPSTRの代わりにLPTSTR.

A文字列を取得または返すほとんどすべての Win32 関数には、 (ANSI?) で終わるバージョンとW(ワイド)で終わるバージョンの 2 つのバージョンがあることに注意してください。

于 2011-05-15T07:27:10.977 に答える