【发布时间】:2015-01-20 11:26:12
【问题描述】:
我们目前有一个使用 v90 (VS2008) 编译器编译的 .NET 3.5 中的 C++/CLI 项目。一切正常。但是当我使用 v10 编译器(VS2010)将项目更改为 .NET 4.0 时,会弹出这些链接器错误:
错误 LNK2022:元数据操作失败 (8013118D):不一致 重复类型中的布局信息(tagTOUCINPUT): (0x02000743)。 ...\MainWindow.obj
错误 LNK2022:元数据 操作失败(8013118D):布局信息不一致 重复类型(tagTOUCINPUT):(0x0200072d)。 ...\stdafx.obj
tagTOUCHINPUT 结构似乎是该项目大量使用的 MFC 的一部分。
我尝试使用ildasm -tokens,但它只是崩溃并显示空错误窗口。
我没有其他想法如何调试这个项目。主要是因为我们继承了它,而且它已经很老了。它也很大,这意味着隔离问题可能非常困难。
编辑:经过一些工作,我很确定我从项目中删除了对本机库的所有引用,除了那些由 VS 自动添加的引用。问题依然存在。
【问题讨论】:
-
是Windows SDK中的声明,WinUser.h包含文件。我没有安装足够旧版本的 SDK,但是当 64 位操作系统还没有出现时,ULONG_PTR 成员没有那种类型。重建您链接的古代图书馆。
-
@HansPassant 你认为有可能找出可能需要更新的库吗?我们自己没有任何东西(一切都是在项目本身内构建的),但它可能是一些第 3 方库。
-
好吧,解决真正的问题。让像 TOUCINPUT 这样的 SDK 结构出现在 .NET 程序集的元数据中没有任何意义。由 way 使用 /clr 编译的太多代码引起的问题。
标签: visual-studio-2010 visual-c++ mfc linker c++-cli