因此,我有一個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
報價:
我們很高興地宣佈,開始與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?
問題是,我可以在電話應用程序上使用它,它的工作原理和認證沒有問題,它都是允許的。 我有Windows 8的問題。1應用程序,而不是電話應用程序 –
這是,如果您要將其提交給Windows應用商店 但是,這不是問題,問題是我無法使用ws2_32.lib創建Windows 8.1項目,而Windows Phone 8.1項目工程 –
對不起,我沒有關於這些限制的信息,但它應該至少沒有錯誤地生成,對吧? –