0

因此,我有一個Visual Studio 2013更新4解決方案,內有2個項目,一個目標Windows 8.1,其他Windows Phone 8.1配置爲建立靜態庫。如何使Ws2_32.lib與VS 2013項目針對Windows 8.1

項目是開源的,所以這裏是供參考的解決方案: https://github.com/gideros/gideros/tree/master/winrt

我需要做的,就是讓使用它的網絡代碼,它使用winsockets。由於這是一個庫項目,有項目屬性沒有鏈接部分,所以我乾脆包括

#include <WinSock2.h> 
#pragma comment(lib, "Ws2_32.lib") 

沒有錯誤內置兩個項目,當包含在Windows Phone應用程序庫,它的工作完全符合市場預期,但在Windows應用程序網絡部分不工作,但也沒有錯誤或崩潰。

我跑它通過應用程序認證程序,並說:

Error Found: The supported APIs test detected the following errors: 
API WSACleanup in ws2_32.dll is not supported for this application type. 

和許多其他引用到WS2_32庫

我開始互聯網上搜索,並有大量的職位說明,你可以在Windows 8.1上不使用winsocket,你必須使用微軟的winrt套接字實現等。

但是後來我偶然發現這個博客宣佈現在(自VS 2013 Update 3以來)有可能在Windows 8.1和Windows 8.1上使用winsock Windows P磨練8.1

http://blogs.windows.com/buildingapps/2014/10/13/winsock-and-more-open-source-for-your-windows-store-apps/

報價:

我們很高興地宣佈,開始與Visual Studio的 2013更新3(下載)在8月發佈的Windows應用程序 認證工具包( WACK)允許在您的Windows 商店應用程序中使用WinSock API。由於WinSock已經被允許在Windows Phone上通過 認證,這項工作完成了這個故事。現在, WinSock在Windows 8.1,Windows Phone 8.1和通用應用程序中可以普遍使用。

因爲我有VS 2013 Update 4,它應該已經工作。所以,我檢查應用程序的認證的版本(這是3.3),它說,它有更新可用,所以我下載了Windows SDK的Windows 8.1來源:

https://dev.windows.com/en-us/develop/app-certification-kit

現在我甚至無法生成項目,因爲它表示Windows 8.1目標中缺少所有Ws2_32.lib部分。 (雖然Windows Phone 8.1仍然按照預期構建和運行)

那麼,甚至有可能在Windows 8.1應用程序上使用winsockets? 如果是的話,我錯過了什麼?

更新1:

這似乎是可能的,但問題是我的設立。

當我檢查在我的項目點,那麼他們的頭文件:

用於Windows手機的

Program Files (x86)/Windows Phone Kits/8.1/Include/winsock2.h 

對於Windows它

Program Files (x86)/Windows Kits/8.1/Include/um/WinSock2.h 

當我檢查文件那就是Windows,那麼它有一個預定義的處理器:

#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) 

而且它不會進入這個if語句,因此對於編譯器來說這個文件基本上是空的

我甚至試圖卸載Windows 8.1 SDK,它並沒有改變任何東西。

然後我手動刪除從Program Files文件夾中的文件,並安裝了

https://dev.windows.com/en-us/develop/app-certification-kit

我仍然有同樣的頭一個新的。那麼我在哪裏可以獲得帶有適當winsock2頭文件的最新Windows 8.1 SDK?

更新2:

所以我刪除一切,重新安裝乾淨的VS 2013快速更新4,再次相同的結果,這一切都建立沒有錯誤,但網絡不工作在Windows 8.1的應用程序,而它完美適用於Windows Phone 8.1。

這就好像Windows 8.1只有空的存根,它什麼都不做。

我一直在問在Windows開發者論壇和微軟的代表之一說,引述:

如果你有VS 2013更新4安裝正確,那麼你將有 得到更新的Windows 8.1 SDK。在該版本的winsock2.h中,只有 大多數WinSock API的ASCII版本不在 Windows Store中排除。您必須專門爲Windows 8商店 應用程序使用UNICODE。

不幸的是,我不知道這意味着什麼,我應該如何繼續。如果這意味着定義了UNICODE宏,那麼它已經被定義了。

更新3:

我已經成功調試WINSOCKET代碼,一切都如預期般出現,服務器端口上偵聽。但沒有任何可以連接到它。這就像它在沙盒模式下運行

更新4:

運行netstat的和Wireshark一切似乎正常工作,看到服務器,我甚至可以從其他計算機連接到它。但是我無法從同一臺計算機上連接。

它似乎MS禁止的Windows應用程序在同一臺機器

我不知道爲什麼,任何人都可以提供任何見解與桌面應用程序進行通信?

How can a Metro app in Windows 8 communicate with a backend desktop app on the same machine?

最後一個問題是

如果VS 2013更新4束與WACK 3.3不允許winsockets,建立Winsock2的頭而Windows 8.1 SDK更新具有WACK3.4,允許插座API,但是捆綁了不構建的較老的winsock2頭。

如何獲得正確的winsock2安裝WACK3.4?

+0

問題是,我可以在電話應用程序上使用它,它的工作原理和認證沒有問題,它都是允許的。 我有Windows 8的問題。1應用程序,而不是電話應用程序 –

+0

這是,如果您要將其提交給Windows應用商店 但是,這不是問題,問題是我無法使用ws2_32.lib創建Windows 8.1項目,而Windows Phone 8.1項目工程 –

+0

對不起,我沒有關於這些限制的信息,但它應該至少沒有錯誤地生成,對吧? –

回答

0

所以基本上套接字可以工作,但有幾個案例需要注意。

存在網絡隔離,無法連接到同一臺計算機上的Windows應用商店應用(正如我在測試中所做的一樣,並認爲網絡無法正常工作)。

但是,如果你可以從遠程機器連接,一切都按預期工作。對

更多信息:

https://msdn.microsoft.com/en-us/library/windows/desktop/dd374089%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396

但你仍然無法通過WACK(這是不需要提交存儲,但仍然)

問題是,VS 2013 Update 4捆綁了winsock2頭文件,它可以構建並運行,並且它具有不允許winsocket的WACK 3.3軟件。

儘管Windows 8.1 SDK更新包含允許套接字API的WACK3.4,但捆綁了不構建和工作的較早的winsock2頭。

因爲你不需要運行WACK來提交應用程序,所以大多數情況下這不會是一個問題,但是因爲我需要檢查是否有任何其他特定的庫我使用,這是可以禁止的,那麼我有隻有從這裏安裝從Windows 8.1 SDK單(應用程序認證)成分:

https://dev.windows.com/en-us/develop/downloads

我有WACK 3.4和現在適當winsockets

還是太糟糕了網絡隔離,基本上殺死目的我首先要移植的東西。所有的工作基本上是徒勞的。

+1

對不起,它不適合你;我不知道具體情況,但我相信Store應用中存在環回地址的安全問題。我還沒有看到VS有一個不匹配的SDK/WACK的情況,但是我的所有機器都對它們有很多問題:-)。我會通過以防萬一。 –

1

Windows和Windows Phone支持WinSock,並且允許使用WACK 3.4。它適用於我使用#pragma comment(lib, "ws2_32.lib")和直接將ws2_32.lib添加到項目設置。

看起來您在升級之後構建項目的方式有點不妥;你可以發佈升級後得到的錯誤嗎?

+0

Baically winsock的功能是不存在的,即使winsock2.h被列入 我打開winsock2.h文件,它似乎它不進入宏觀 #如果WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) 這樣整個文件就像空編譯器 –

+0

您可能正在從舊SDK中獲取頭文件。從哪個目錄加載頭文件?檢查你的項目包括路徑設置。 –

+0

我用更多的信息更新了我的問題 –

相關問題