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:pure の代わりに /clr を使用してプログラムを作成してみてください。

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) でプログラミングしているのであれば、奇妙な疑似標準 Win32-wrapper の代わりに .NET のスレッド機能を使用しないのはなぜ_beginthreadですか?

C++/CLI を使用したいが、古き良き を引き続き使用できる場合は、の代わりに_beginthreadだけでコンパイルしてみてください。これにより、呼び出し規約を持つことができる非管理関数が可能になります。/clr/clr:pure__cdecl

于 2012-06-28T13:57:40.473 に答える