0

我在 microsoft visual studio c++ 10 express 中遇到 _beginthread 问题:我的代码:

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:“ beginthread”:无法将参数 1 从“void ( _cdecl *)(void *)”转换为“void (__cdecl *)(void *)”

4

2 回答 2

1

尝试使用 /clr 而不是 /clr:pure 来构建您的程序。

请参阅http://msdn.microsoft.com/en-us/library/k8d11d4s.aspx

于 2012-06-28T13:55:47.483 回答
1

编译器错误看来,您正在使用/clr:pureor编译项目/clr:safe(在这种情况下,您不是在 C++ 中编程,而是在 C++/CLI 中编程),因此无法使用__cdecl调用约定,而_beginthread.

如果您无论如何都使用 C++/CLI(以及 .NET)进行编程,那么为什么不直接使用 .NET 的线程工具而不是奇怪的伪标准 Win32-wrapper_beginthread呢?

如果你想使用 C++/CLI,但仍然可以使用 good old _beginthread,那么尝试用 just /clrinstead of编译它/clr:pure,它允许非托管函数可以有__cdecl调用约定。

于 2012-06-28T13:57:40.473 回答