指向成员的指针对于托管 class 无效

A pointer-to-member is not valid for a managed class

我在 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";

我收到此错误:

a pointer-to-member is not valid for a managed class

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

illegal operation on bound member function expression

我该如何解决这个问题?

我认为您进行函数调用的方式不正确。 大概应该是这样的,

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

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

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

if (bool application::GUI::isRunning)
  1. 如果您不想保存函数的结果,则不需要 bool。要么定义一个布尔变量并将函数的结果分配给它:

    bool result = isRunning(...);
    if(result)
         ...
    

if(isRunning())
   ...
  1. application::gui::isRunning 表达式 returns 您试图定义为 bool 变量的 isRunning 函数的指针。
  2. 假设您将前两个固定为:

    LPCSTR arg = ...;
    if(application::GUI::isRunning(arg))
         label1->Text = "cat";
    

这意味着您正在调用 GUI class 的 static 函数 或 GUI 命名空间下的函数(GUI 也在 application 命名空间下)。

我的猜测是 GUI 是一个 Form class,所以您正在尝试调用,但由于该函数不是 static,您将再次遇到错误。所以你有两种情况需要解决:

如果您从 GUI

的另一个函数中得到此错误
 LPCSTR arg = ...;
 if (isRunning(arg))
     label1->Text = "cat";

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

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