boost.future导致clr问题

时间:2014-08-11 11:17:45

标签: c++ visual-studio-2012 boost clr

我正在使用visual studio 2012和一个需要链接到本机库的clr库。 我的库正在使用boost :: future。

当我对托管项目使用future :: then(F&&)函数时,我遇到了这个问题:

Error   910 error LNK2022: metadata operation failed (8013119F) : A TypeRef exists which        should, but does not, have a corresponding TypeDef: (dummy): (0x0100003e).  D:\ClrProject\somefile.obj

我按照其他问题的建议尝试使库中的dummy类型完整,因为我无法从模板内部转发声明嵌套结构,就像使用boost::thread::dummy结构一样

这并没有解决问题。

我的设置如下:

  • 提升1.55。
  • 使用boost .dlls。
  • 定义BOOST_RESULT_OF_USE_DECLTYPE
  • 定义BOOST_THREAD_PROVIDES_FUTURE
  • 定义BOOST_THREAD_PROVIDES_FUTURE_CONTINUATION

我也在依赖的.dll上使用这些非常定义,以确保API的所有部分都正确公开。

1 个答案:

答案 0 :(得分:2)

解决。

@Hans Passant你的建议是正确的。我只是没有以正确的方式放置#pragma

我必须放入编译指示,以便将我的标头编译为非托管代码。完成后,似乎我的代码的模板实例化是以非托管方式发出的。那时,问题就消失了。

所以我做的是这样的:

#pragma managed(push, off)
#include "MyHeaderWithFutures.h"
#pragma managed(pop)

void f() {
   //
   f = myObject.Something().then(...);
}