我正在使用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
结构一样
这并没有解决问题。
我的设置如下:
我也在依赖的.dll上使用这些非常定义,以确保API的所有部分都正确公开。
答案 0 :(得分:2)
解决。
@Hans Passant你的建议是正确的。我只是没有以正确的方式放置#pragma
。
我必须放入编译指示,以便将我的标头编译为非托管代码。完成后,似乎我的代码的模板实例化是以非托管方式发出的。那时,问题就消失了。
所以我做的是这样的:
#pragma managed(push, off)
#include "MyHeaderWithFutures.h"
#pragma managed(pop)
void f() {
//
f = myObject.Something().then(...);
}