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

我用更多的信息更新了我的问题 –

相关问题