使用/ clr编译时使用boost线程

时间:2011-01-10 18:12:38

标签: .net c++ multithreading clr

我已经放弃了直接从windows API创建GUI,所以我将使用表单。我想多线程化我的应用程序并将GUI包装在一个类中并将其放在一个单独的线程中。当我单击按钮等时,它将更改将从主线程读取的结构中的值。我的问题是,当我编译我的应用程序时,我的链接器出错了。

1>Core.obj : error LNK2022: metadata operation failed (8013119F) : A TypeRef exists which should, but does not, have a corresponding TypeDef: (dummy): (0x0100001f).

我的main代码如下。

int main()
{
//create thread object pointer
    boost::thread *GUIThread;
//create pointer to GUIInterface, which contains a member function that
//contains the Application::Run
    GUIInterface *myinterface;
    myinterface = new GUIInterface;

    GUIThread = new boost::thread(boost::bind(&GUIInterface::MainFunction, myinterface));
    return 0;
}

在创建类并在主线程中调用函数时,它工作正常,但使用boost会导致问题。我使用正确的编译器MSVC-10.0构建了boost,并且线程库在过去一直有效,但是clr只会导致问题。 有关如何解决此问题的任何建议? 或者,如果我应该使用.net多线程(如果我这样做,我真的需要一些如何使用c ++的链接,我发现大多数东西都在C#中)。 感谢。

1 个答案:

答案 0 :(得分:2)

在托管应用程序中使用boost::thread时存在两个问题。第一个是您遇到的链接器错误。第二个是应用程序启动时的初始化错误,如果boost::thread实现与您的应用程序静态链接。

older bug report中提到了这两个问题。我不知道在以后的版本中这是否有所改变; 1.43有同样的问题。我假设不是因为案件被关闭wontfix