问题:如何使用string / char *变量作为GetPrivateProfileInt方法的路径参数。
我正在尝试使用为Windows提供的GetPrivateProfileInt。以下代码运行perfeclty没有任何问题:
mCursor = db.rawQuery("SELECT * FROM " + DataBase.TABLE_NAME + " ORDER BY " +KEY_EVENTDATE+
" WHERE " + KEY_YEAR + " = ? AND " + KEY_MONTH + " = ?", new String[]{cy, month[j]} );
但在我的情况下,路径被传递给函数。像这样:
int x = GetPrivateProfileInt(L"x",L"y",1,L"This\\is\\the\\path");
在下面给出的一些尝试中,x接收默认值。即路径未正确传递给GetPrivateProfileInt方法。
以下是我做的其他几次尝试:
Attempt1:
void fun(std::string path)
{
//error const char* is incampatible with LPCWSTR.
int x = GetPrivateProfileInt(L"x",L"y",1,path.c_str());
}
ATTEMPT2:
// No error, default value is being read.
int x = GetPrivateProfileInt(L"x",L"y",1,(LPCTSTR)path.c_str());
Attempt3:
// No error, default value is being read.
int x = GetPrivateProfileInt(L"x",L"y",1,(wchar_t*)path.c_str());
我查看了答案here但未找到解决方案。
答案 0 :(得分:1)
该函数有两个版本,一个采用UCS-2字符(GetPrivateProfileIntW
),另一个采用char
个字符(GetPrivateProfileIntA
)。没有允许您混合参数的版本。您可以选择将 appname 和 keyname 参数更改为单字节以匹配您的数据
GetPrivateProfileIntA("x", "y", 1, path.c_str());
或使用MultibyteToWideChar
将最后一个参数转换为UCS-2,然后调用GetPrivateProfileIntW
。
指针转换不是字符编码的转换,也不起作用。编译器类型系统可以帮助你,并且使用强制转换来关闭它几乎总是错误的做法(例外:GetProcAddress
的返回值确实需要强制转换)。