首页 > 解决方案 > 指向成员的指针对托管类无效

问题描述

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

在头文件中,我声明了 void createThread()

private: 

  void createThread() {
            char buffer[1024];
            ZeroMemory(buffer, sizeof(buffer));
            while (true) {
                recv(connection, buffer, sizeof(buffer), 0);
                main.displayMessage(gcnew System::String(buffer));
            }
            ExitThread(0);
    }

现在,我想调用函数 createThread CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)createThread, NULL, NULL, NULL) 之后我收到此错误:指向成员对托管类无效

我尝试了用户线程库但不支持。我该如何解决?

标签: c++-cli

解决方案


看来此函数是在托管类中定义的。您需要使用托管线程对象,而不是非托管 CreateThread。

出现这个错误有两个原因:首先,它是一个实例方法,而不是静态方法,所以需要用这种类型的实例来调用它,而无法传递给 CreateThread。其次,它是一个托管对象,它的方法不会轻易地转换为 C 风格的原始函数指针。

最后,关于语言的注释:C++/CLI 旨在充当一种将托管代码(例如,C#)与非托管 C++ 接口的方式。它不打算作为主要的开发语言。如果您不需要链接托管代码和非托管代码,您可能需要考虑为您的应用程序切换到 C# 或 C++。


推荐阅读