Visual C++/CLI, ThreadStart с указателем на функцию

Я работаю над управляемым C++ или C++/CLI. Я пытаюсь запустить поток CLI для выполнения функции. Однако, когда я пытаюсь собрать, я получаю сообщение об ошибке «Оптимизирующий компилятор Microsoft (R) C/C++ перестал работать». В окне вывода. «Foo.cpp(8): фатальная ошибка C1001: в компиляторе произошла внутренняя ошибка».

//the class which holds the function to run 
ref class Foo
{
    void handleEvent();
    void (*func)(void);
};

void Foo::handleEvent()
{
    ThreadStart ^ param = gcnew ThreadStart(func); //line 8
    Thread ^ thread = gcnew Thread(param);
    thread.Start();
}

Разве ThreadStart не может обрабатывать собственные указатели функций? Если нет, есть ли другой способ запустить обычный указатель функции C из C++/CLI?


person stands2reason    schedule 29.01.2013    source источник


Ответы (1)


Попробуйте заменить строку 8 на

ThreadStart^ param = (ThreadStart^) System::Runtime::InteropServices::Marshal::GetDelegateForFunctionPointer((IntPtr)func, ThreadStart::typeid);
person Stefan Dragnev    schedule 29.01.2013