指向成员的指针对托管类无效

时间:2016-01-03 06:39:17

标签: c++-cli

我在Visual Studio C ++中有一个Windows窗体。 (CLR)

在头文件中,我声明bool isRunning(查找记事本是否正在运行):

private: 
    bool isRunning(LPCSTR pnotepad)
    {
        HWND hwnd;
        hwnd = FindWindow(NULL, pnotepad);
        if (hwnd != 0)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

现在在复选框上,我希望它检查进程是否正在运行。

private: System::Void checkBox2_CheckedChanged(System::Object^  sender, System::EventArgs^  e) {

if (bool application::GUI::isRunning)
    label1->Text = "cat";

我收到此错误:

  

指向成员的指针对托管类

无效

我尝试将其更改为&isRunning。这给了我与上面相同的错误和

  

对绑定成员函数表达式的非法操作

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

下面的一切似乎都是错误的:

if (bool application::GUI::isRunning)
  1. 如果您不想保存功能结果,则不需要bool。定义一个“bool”的变量,并将函数的结果赋值给:

    bool result = isRunning(...);
    if(result)
         ...
    
  2. if(isRunning())
       ...
    
    1. application::gui::isRunning表达式返回您尝试定义为bool变量的isRunning函数的指针。
    2. 让我们说你把前两个修改为:

      LPCSTR arg = ...;
      if(application::GUI::isRunning(arg))
           label1->Text = "cat";
      
    3. 这意味着您正在调用static类的GUI函数 或GUI命名空间下的函数(GUI也在application命名空间下)。

      我的猜测是GUI是一个Form类,所以你试图调用,因为函数不是static,你会再次出错。所以你有两个案例需要解决:

      如果您从GUI

      的其他功能收到此错误
       LPCSTR arg = ...;
       if (isRunning(arg))
           label1->Text = "cat";
      

      否则你需要一个指向GUI对象的指针:

       LPCSTR arg = ...;
       if (gui-> isRunning(arg))
           label1->Text = "cat";
      

答案 1 :(得分:0)

我认为你正在以错误的方式进行函数调用。 可能它应该像下面一样,

if (application::GUI::isRunning())
{
    label1->Text = "cat";
}

上面只是提示进行正确的函数调用 - 但是由于isRunning是一个私有成员函数,它如何直接从外部类调用,而且不需要创建任何对象。它不是静态成员函数。请检查这一点。