【问题标题】:c++ dll via Win runtime component in c# UWP app works for Arm but not for x86/x64c# UWP 应用程序中通过 Win 运行时组件的 c++ dll 适用于 Arm,但不适用于 x86/x64
【发布时间】:2017-09-26 11:56:57
【问题描述】:

我需要从适用于 Windows10 的 C# UWP 应用程序(在桌面和移动设备上运行相同的应用程序)调用 win32 套接字 API,因为 win10 sock 库存在一些问题 环境 - VS2015 更新 3。

我按照 here 的说明创建了项目结构。 所以调用如下..

C# UWP 应用程序 -> C++ WindowsRuntimeComponent -> 通用 dll(c++)(具有来自 c++ win32 dll 的代码)

在 dll 中,我只是创建一个 UDP 服务器并在 recvfrom(.....) 处等待 udp 数据包

当我在 Win 10 移动设备 (ARM) 上运行应用程序时,这可以正常工作,但在选择的架构为 x86 或 x64 时无法正常工作。当 bind() 成功时,我在 recvfrom() 中没有收到任何用于 x64/x86 的 udp 数据包。

为什么相同的代码适用于 ARM 而不适用于 x64/x86。可能是什么问题。

【问题讨论】:

  • 在这些情况下,您是否有机会在同一台机器上运行代码?
  • @Sunius - 抱歉,我没有完全明白这个问题。我猜“那些情况”是指 x86/x64 ..对吗? Forx64 - 我在 VS2015 中使用 Debug+x64 + Local Machine 和 Debug+x64+Simulator 执行它。在这两种情况下,行为相同...调用 recvfrom() 后没有结果。
  • 顺便说一下我的桌面显示 -> Win10 Enterprise,版本 1511,操作系统构建 10586.873,64 位操作系统 ...(但我想这对面临的问题应该没有任何不利影响)

标签: c++ dll windows-runtime uwp udp


【解决方案1】:

如果套接字的两端在同一台计算机上,Windows 应用商店应用程序将无法侦听套接字或从 UDP 连接接收数据。在不同的机器上运行服务器和您的应用程序。

【讨论】:

  • 客户端和服务器在不同的机器上运行。
  • 如何调试dll代码,插入的断点在dll代码中是不活动的。有什么特殊的步骤要遵循吗?
  • 如果您的应用是托管的,请确保您的调试器设置为原生或混合模式调试。除此之外,请确保它的 PDB 已加载到 VS 模块窗口中。
【解决方案2】:

一个安全补丁正在等待安装在 clinet 机器(Win 7 OS)上是服务器在 recvfrom() 调用中等待的原因...

安装补丁并重新启动系统后,它工作正常。

【讨论】:

    【解决方案3】:

    面临同样的问题。 recvfrom 函数没有收到来自本地网络的数据包。通过将 privateNetworkClientServer 功能添加到应用程序清单 (https://docs.microsoft.com/en-us/windows/uwp/packaging/app-capability-declarations) 解决了该问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-10
      • 2013-11-26
      • 1970-01-01
      • 1970-01-01
      • 2012-03-09
      • 1970-01-01
      • 1970-01-01
      • 2012-11-07
      相关资源
      最近更新 更多