【问题标题】:How to read a environmental variable in VC++ [duplicate]如何在 VC++ 中读取环境变量 [重复]
【发布时间】:2014-04-20 02:19:56
【问题描述】:

我是 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)

但没有一个有效。提前致谢

【问题讨论】:

  • 您真的使用 C++/CLI 吗?如果是这样,第一行应该使用:: 而不是.,但文档说应该没问题。
  • 结合使用 C++/CLI 和 MFC 是可能的,但不是每天都在做的事情。还有什么错误(S)当“没有工作”?
  • 在 C++/CLI 程序中使用 NULL 无效,您必须使用 nullptr。 C++/CLI 和 MFC 代码的混合非常可疑。
  • @crashmstr 我正在使用 C++
  • @user3420781 Environment::GetEnvironmentVariable 和 System::Environment::GetEnvironmentVariable 是对 C++/CLI 的 .Net 调用。您可以执行此操作(检查您是否使用 /CLR 标志进行编译),否则您需要查找 Windows API 调用。在这种情况下,GetEnvironmentVariable 接受多个参数。

标签: c++ winapi environment-variables


【解决方案1】:

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

相反,您可以使用 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 课上,那就不一样了。

【讨论】:

  • 我收到error C2039: 'Enabled' : is not a member of 'CWnd'
  • @user3420781 我已将其更改为使用 EnableWindow。如果这不起作用,那么您真的需要显示更多代码。
猜你喜欢
  • 2015-09-21
  • 2012-04-17
  • 2020-09-18
  • 2017-11-03
  • 2019-11-02
  • 2015-05-18
  • 1970-01-01
  • 1970-01-01
  • 2011-08-17
相关资源
最近更新 更多