我在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) 之后,我得到这个错误: 指向成员对托管类无效
我尝试了用户线程库,但不支持。我该如何解决?
答案 0 :(得分:0)
似乎此函数在托管类中定义。您需要使用托管的thread object,而不是非托管的CreateThread。
存在此错误的原因有两个:首先,它是一个实例方法,而不是静态方法,因此需要使用这种类型的实例来调用它,而这种方法无法传递给CreateThread。其次,它是一个托管对象,其方法不会轻易转换为C风格的原始函数指针。
最后,关于该语言的注释:C ++ / CLI旨在作为一种将托管代码(例如C#)与非托管C ++接口的方法。它不打算用作主要的开发语言。如果不需要链接托管和非托管代码,则可能要考虑为应用程序切换到C#或C ++。