2016-12-05 4 views
0

質問:GetPrivateProfileIntメソッドのパスパラメーターとしてstring/char * variableを使用する方法。GetPrivateProfileIntメソッドのパラメーター

窓にはGetPrivateProfileIntを使用しようとしています。次のコードは、いかなる問題なく動作しますperfeclty:

int x = GetPrivateProfileInt(L"x",L"y",1,L"This\\is\\the\\path"); 

しかし、私の場合には、パスが関数に渡されています。このようなもの:

xはデフォルト値を受け取ります。つまり、パスが正しくGetPrivateProfileIntメソッドに渡されていないことを示します。続き

は私によって作られた他のいくつかの試みです:

Attempt1:

// No error, default value is being read. 
int x = GetPrivateProfileInt(L"x",L"y",1,(LPCTSTR)path.c_str()); 

Attempt2:

// No error, default value is being read. 
int x = GetPrivateProfileInt(L"x",L"y",1,(wchar_t*)path.c_str()); 

Attempt3:

//_T() macro giving error. 
// 'Ls' : undeclared identifier.identifier "Ls" is undefined. 
LPCTSTR path_s = _T(path.c_str()); 
int x = GetPrivateProfileInt(L"x",L"y",1,path_s); 

答えはhereでしたが、解決策を見つけることができませんでした。

答えて

1

2つのバージョンの関数があります.1つはUCS-2文字(GetPrivateProfileIntW)、もう1つはchar文字(GetPrivateProfileIntA)です。パラメータを混在させるバージョンはありません。あなたのオプションはappnameのキー名をあなたのデータ

GetPrivateProfileIntA("x", "y", 1, path.c_str()); 

またはGetPrivateProfileIntWを呼び出し、その後、MultibyteToWideCharを使用してUCS-2への最後のパラメータを変換するために一致するようにシングルバイトにパラメータを変更するのいずれかです。

ポインタキャスティングは文字エンコーディングの変換ではなく、動作しません。コンパイラ型システムはあなたを助けるためのものであり、キャストでシャットダウンすることはほとんど常に間違っています(例外:戻り値GetProcAddressにはキャストが必要です)。

+0

動作するかどうかを確認してください。 – Shasha99

+0

ありがとうございます。出来た !!! – Shasha99

関連する問題