Visual studio 2010 初级visualc++;问题:无法将参数1从';void(u cdecl*)(void*)和#x27;至';void(u cdecl*)(void*)和#x27;

Visual studio 2010 初级visualc++;问题:无法将参数1从';void(u cdecl*)(void*)和#x27;至';void(u cdecl*)(void*)和#x27;,visual-studio-2010,visual-c++,beginthread,Visual Studio 2010,Visual C++,Beginthread,所以我是一个以Linux为主的程序员,最近在Windows上找到了一份工作。我已经开发了一些数字代码,但现在需要安装一个简单的GUI 目前,我有一个按钮,上面有一个onClick事件,它调用了一个名为start的函数,该函数启动了数字内容。但这会冻结GUI,因此我想将对start的调用放入工作线程中 我已经这样声明了start:void\uu cdecl start(void*args)。我添加了\uuu cdec1,因为我之前得到了错误:错误C2664:“\u beginthread”:无法将

所以我是一个以Linux为主的程序员,最近在Windows上找到了一份工作。我已经开发了一些数字代码,但现在需要安装一个简单的GUI

目前,我有一个按钮,上面有一个
onClick
事件,它调用了一个名为
start
的函数,该函数启动了数字内容。但这会冻结GUI,因此我想将对
start
的调用放入工作线程中

我已经这样声明了
start
void\uu cdecl start(void*args)
。我添加了
\uuu cdec1
,因为我之前得到了错误:
错误C2664:“\u beginthread”:无法将参数1从“void(\uu clrcall*)(void*)”转换为“void(\uu cdecl*)(void*)”

现在,单击按钮时,将运行以下代码:

output->Text = "Starting";
_beginthread(start, 0, NULL);
output->Text = "Done";
这给了我一个令人困惑的错误
无法将参数1从“void(\uu cdecl*)(void*)”转换为“void(\uu cdecl*)(void*)”


如果有人能看到我的错误所在,我将永远感激。

我们应该看看
start
是如何以及在哪里声明的,但让我猜猜:这是一个托管方法(那么您是用C++/CLI而不是C++编程的)。我只是避免使用
\u beginthread
。在托管世界中(除非您真的需要),您最好使用托管函数/类(在本例中为
ThreadPool
Thread
)。
start
在名为
Processing.cpp
的单独文件中声明为
void\u cdecl start(void*args)
,它不在
Form1.h
中。我想我有一些关于C++和CLI VC++的阅读,以及管理的VS和非托管方法。你可以放弃<代码>(yxCCDL<)/代码>,而使用<代码>“SuxStudiaDX API”,因为它接受指向托管代码中函数的指针。看,你是如何包括这一声明的?您是否将其放在
#pragma unmanaged
部分?无论如何……我建议使用定义良好的“连接点”将它们完全分开(托管/非托管),或者移到仅托管(请参阅MSDN了解
System.Threading.Thread.Start()
method或
System.Threading.ThreadPool
methods)。根据我的经验,混合总是很痛苦的(特别是在开始使用C++/CLI时)。