【问题标题】:Using ARM compiled DLL in a Windows 10 IoT UWP Application on Raspberry Pi 2在 Raspberry Pi 2 上的 Windows 10 IoT UWP 应用程序中使用 ARM 编译的 DLL
【发布时间】:2016-02-07 21:45:16
【问题描述】:

我正在尝试将项目编译为 UWP 应用程序,以便在安装了 Windows 10 IoT 的 Raspberry Pi 2 上进行部署。

该项目使用带有包装器和 DLL 的开源框架。

我已将 DLL 重新编译为 ARM 并将 C# 包装器放入我的项目中。

我已将 using 添加到 MainPage.xaml.cs 并使用了包装器/DLL 中的函数。

我使用 FTP 将编译后的 DLL 文件复制到 RPi2 上的 C:\Users\Public 并使用 ICACLS 将 DLL 设置为可供所有人访问。

当我通过远程调试器运行我的应用程序时,我得到:

附加信息:无法加载 DLL 'C:\Users\Public\snap7.dll':访问被拒绝。 (例外来自 HRESULT: 0x80070005 (E_ACCESSDENIED))

我尝试在 Windows IoT 上对 DLL 文件执行的操作是否可行?

【问题讨论】:

  • 请记住,C# 包装器必须编译为 AnyCPU。
  • 您是否使用了VS2015 Visual C++“Blank Windows IoT Core Console Application”模板并将配置类型更改为动态链接库(.dll)?
  • 我遇到了完全相同的问题。我的解决方案是将 dll 添加到解决方案资源管理器中。设置 dll 的属性:“复制到输出目录”到“如果更新则复制”然后当我调用 dll 时,我不会收到拒绝访问错误。您必须找到部署目录。我的在“C:\Data\Users\DefaultAccount\AppData\Local\DevelopmentFiles\”中
  • 应用程序还需要对您将使用 DLL 调用的任何设备/文件的权限

标签: uwp raspberry-pi2 windows-10-iot-core


【解决方案1】:

我认为你的做法是错误的。您不需要执行以下步骤:

我使用 FTP 将编译后的 DLL 文件复制到 RPi2 上的 C:\Users\Public 并使用 ICACLS 将 DLL 设置为可供所有人访问。

只需像您一样将 DLL 添加到您的项目中并将其设置为“Copy Local = true”就足够了。部署时,DLL 会自动复制到您的 bin 文件夹中。

【讨论】:

  • 当我尝试将编译后的 DLL 添加到项目中时,我得到“..无法添加。请确保该文件是可访问的,这是一个有效的程序集或 COM 组件。”我将其添加为参考,这是正确的方法吗?
  • 另外,DLL 是用 C++ 编写的,因此不能直接作为引用添加到 C# 或 VB 项目中。有没有办法解决这个问题。
  • 您可以找到在 UWP 应用中导入非托管 C++ dll 的方法,也可以在 C++ 库周围创建托管包装器,以便在 VS 中添加引用。无论哪种方式,它都需要一个新问题
  • 已经有一个包装器来加载 DLL。问题是当调试器在 Raspberry Pi 上运行代码时,应用程序无法看到包装器指向的 DLL。
  • 如果您使用提供的包装器 (snap7.net.cs),请将该文件中第 43 行的位置更改为 [UWP 应用名称]\[pathto]\\snap7.dll
【解决方案2】:

通常本机 DLL 不能与 UWP 应用一起使用。 还要仔细查看未使用 IoT-Core 实现的 API。 有这方面的工具。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-17
    • 1970-01-01
    • 1970-01-01
    • 2020-04-10
    • 2023-03-21
    • 2015-07-14
    • 2017-06-02
    • 2020-10-18
    相关资源
    最近更新 更多