c++-cli - 指向成员的指针对托管类无效
问题描述
我在 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) 之后我收到此错误:指向成员对托管类无效
我尝试了用户线程库但不支持。我该如何解决?
解决方案
看来此函数是在托管类中定义的。您需要使用托管线程对象,而不是非托管 CreateThread。
出现这个错误有两个原因:首先,它是一个实例方法,而不是静态方法,所以需要用这种类型的实例来调用它,而无法传递给 CreateThread。其次,它是一个托管对象,它的方法不会轻易地转换为 C 风格的原始函数指针。
最后,关于语言的注释:C++/CLI 旨在充当一种将托管代码(例如,C#)与非托管 C++ 接口的方式。它不打算作为主要的开发语言。如果您不需要链接托管代码和非托管代码,您可能需要考虑为您的应用程序切换到 C# 或 C++。
推荐阅读
- arrays - 为什么当我打印我的对象数组时它显示全部为空?
- angular - 使用 @angular/localize 本地化的 Angular 12 使用 nginx 在 docker 中运行
- python - CondaValueError:目标前缀是基本前缀。中止。在 anaconda 提示符下
- cors - Blazor webassembly - windows 身份验证 - CORS 错误 - 请求的资源上不存在“Access-Control-Allow-Origin”标头
- r - 转换后 R 管道运算符的行为
- reactjs - 如何使用 react-leaflet 显示我的搜索栏?
- python - Nonetype 对象没有 lower 属性
- azure - 同步 Azure AD 上 Windows 10 不可用的设置
- flutter - 用户已通过身份验证,但其数据未保存在 Cloud Firestore 中
- django - Spring Boot 看起来比 Django 更像样板