GetPrivateProfileInt方法的参数

时间:2016-12-05 19:25:23

标签: c++ windows visual-studio ini

问题:如何使用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但未找到解决方案。

1 个答案:

答案 0 :(得分:1)

该函数有两个版本,一个采用UCS-2字符(GetPrivateProfileIntW),另一个采用char个字符(GetPrivateProfileIntA)。没有允许您混合参数的版本。您可以选择将 appname keyname 参数更改为单字节以匹配您的数据

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

或使用MultibyteToWideChar将最后一个参数转换为UCS-2,然后调用GetPrivateProfileIntW

指针转换不是字符编码的转换,也不起作用。编译器类型系统可以帮助你,并且使用强制转换来关闭它几乎总是错误的做法(例外:GetProcAddress的返回值确实需要强制转换)。