因此,我有一个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项目工程 –
对不起,我没有关于这些限制的信息,但它应该至少没有错误地生成,对吧? –