2014-04-24 53 views
0

的发展平台,为我们的C#项目目前的Visual Studio 2010,和我的开发计算机是Windows 7的在Windows 7上开发并使用VS 2010时,可以访问Windows 8 .tlb吗?

我需要实现一个Windows界面是Mbnapi.tlb的一部分一些代码,并且仅适用于Windows 8.

当我检查我的电脑时,此文件的Windows 8版本存在(见下文)。 enter image description here

因此,根据帮助,我从以前的SO问题了,我删除从我的项目的参考Mbnapi.tlb,并加入到C的引用:\ Program Files文件\的Windows套件\ 8.0 \ LIB \ win8的\恩\ 64 \ Mbnapi.tlb。

问题是,它似乎没有工作。我保存了更改,然后尝试访问仅在Windows 8中可用的API函数,但它不可见。

当我在Windows 8计算机上打开VS 2012中的项目并对新的Mbnapi.tlb进行相同的引用更改时,我能够在Visual Studio中看到Windows 8功能。

因为.tlbs的Windows 8的版本是在我的开发环境,我认为我应该能够使用它们,甚至无法在Windows 7

测试功能我问题是:有谁知道如何解决这个问题,以便我可以在Windows 7计算机上开发Windows 8?

+0

类型库仅描述COM对象的接口。如果COM对象在Windows 7中不存在(或者具有不同的接口),那么它将不起作用(如你所见)。这听起来像你混淆了'tlb'与它描述的COM对象。 –

+0

我对整件事感到困惑。为什么MS使Win7上的.tlb库可用,如果它后面没有COM对象?有一个使用Mbnapi进行C#项目的指南,但是它在2009年发布,并没有解决这个问题。 –

+0

它确实有一个COM对象,但它是一个具有不同接口的较老的对象 - 当他建议在Win8机器上生成互操作时,Hans说得对。 –

回答

3

这不起作用,添加对.tlb文件的引用会导致Visual Studio在您的项目文件中使用<COMReference>元素来声明类型库{guid}。不是该文件。你将不可避免地获得注册的Win7版本的类型库,而不是Win8版本。所以你会看到Win8补充缺失。这是一件好事,它确保您的程序实际上可以被调试和测试。

您必须在Win8机器上运行Tlbimp.exe将类型库转换为互操作库。你会得到MbnApi.dll,将它复制到你的Win7机器到你的项目目录并添加一个对它的引用。

+0

啊,谢谢你。我在MS的白皮书中找到了运行Tlbimp.exe的说明,但无法加入关于如何适应这种特殊情况的小点。明天我会在Windows 8电脑上试用Tlbimp.exe。 –

相关问题