2014-04-24 102 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。 –

相關問題