我在c++ 10 express中遇到了c++的问题:我的代码:
void __cdecl DashThread( void * Args ) // function without any class refs
{
while(1){
MessageBox::Show("work");
Sleep(5000);
}
_endthread();
}
private:
System::Void button8_Click_1(System::Object^ sender, System::EventArgs^ e) {
HANDLE HDash = ( HANDLE ) _beginthread(DashThread, 0, NULL );
}和错误:
错误C3641:'DashThread‘:用/clr:pure或/clr:safe编译的函数的无效调用约定'__cdecl’ 错误C2664:‘入门线程’:无法将参数1从‘_cdecl *)(void *)’转换为‘__cdecl* (__cdecl *)’
发布于 2012-06-28 13:57:40
从编译器错误中可以看出,您正在用/clr:pure或/clr:safe编译您的项目(在这种情况下,您不是用C++编程,而是使用C++/CLI ),因此不能使用__cdecl调用约定,而这又是_beginthread所需要的。
如果您正在使用C++/CLI (因此也是.NET)编程,那么为什么不直接使用.NET的线程处理工具而不是奇怪的伪标准-Win32 32包装器_beginthread?
如果您想使用C++/CLI,但仍然能够使用好的旧_beginthread,那么尝试使用/clr而不是/clr:pure编译它,后者允许具有__cdecl调用约定的非托管函数。
发布于 2012-06-28 13:55:47
尝试使用/clr而不是/clr:pure来编写您的程序。
请参阅http://msdn.microsoft.com/en-us/library/k8d11d4s.aspx
https://stackoverflow.com/questions/11246052
复制相似问题