如何在VC ++中读取环境变量

时间:2014-03-14 16:43:01

标签: c++ winapi environment-variables

我是VC ++的自学者。我试图读取环境变量,如果有特定变量,那么它应该启用一个复选框。这是代码

if (Environment.GetEnvironmentVariable("GR_STRIP") == NULL)
{
GetDlgItem(PRINTER)->Enabled = false ;                  
}
else

GetDlgItem(PRINTER)->Enabled = true ;

但我收到了以下错误

error C2660: 'GetEnvironmentVariable' : function does not take 1 parameter
error C2039: 'Enabled' : is not a member of 'CWnd'

我甚至尝试过改变

if (Environment::GetEnvironmentVariable("GR_STRIP") == NULL)
if (System::Environment::GetEnvironmentVariable("GR_STRIP") == NULL)

但没有效果。提前致谢

1 个答案:

答案 0 :(得分:2)

好的,您发布的代码非常令人困惑。如果您使用的是C ++ / CLI,则应该可以使用(如果您更改为使用::而不是.)。如果没有,我不知道你在哪里找到了,但.Net Framework中的任何内容都是禁止的。

相反,您可以使用Windows API调用GetEnvironmentVariable

声明如下:

DWORD WINAPI GetEnvironmentVariable(
  _In_opt_   LPCTSTR lpName,
  _Out_opt_  LPTSTR lpBuffer,
  _In_       DWORD nSize
);

我没有测试过这个,但我认为它应该做你想要的(示例不读取值,因为你似乎只想检查存在:

DWORD size = 0;
GetEnvironmentVariable("GR_STRIP", NULL, &size); //get the size of the value
if (GetLastError() == ERROR_ENVVAR_NOT_FOUND)
{
    EnableWindow(GetDlgItem(PRINTER), FALSE);
}
else
{
    EnableWindow(GetDlgItem(PRINTER), TRUE);
}

"更简单"选项是使用C库函数getenv

if (getenv("GR_STRIP") == NULL)
{
    EnableWindow(GetDlgItem(PRINTER), FALSE);
}
else
{
    EnableWindow(GetDlgItem(PRINTER), TRUE);
}

我认为你会得到一些混合的.Net,MFC和Windows API代码。我更新了使用EnableWindow的答案。如果你在MFC课程中,那就不一样了。