【问题标题】:How to P/Invoke to a native dll from Metro?如何从 Metro P/Invoke 到本机 dll?
【发布时间】:2011-12-10 01:52:29
【问题描述】:

我有一个由两部分组成的库 - 一个 .net 程序集,P/Invokes 到一个本地 3rd 方 dll。在桌面模式下,这工作得很好:但是,当从 Metro 风格应用程序引用程序集并运行它时,它会在 P/Invoke 上引发 System.DllNotFoundException 抱怨“无法加载 DLL 库”:指定的模块无法找到了。”

本机 dll 没有做任何特殊的事情,只是创建到服务器的传出 TCP/IP 连接。系统无法知道这一点,而是本机 dll 可以做任何事情。这就是为什么我怀疑它可能无法做到这一点。

msdn 上提到了一些关于 Metro 风格应用程序的 dll 搜索顺序,暗示可以加载本机 dll?

我还发现这个link on msdn 谈论加载“库”并在清单文件中提到 PackageDependency,但对我来说仍然不清楚 如何以可能的方式将本机 dll 添加到包中到P/Invoke

【问题讨论】:

  • 您可以尝试将 DLL 中的 TCP/IP 内容注释掉并再次测试吗?这将区分未找到 DLL 和未找到其依赖项。另外,您是否勾选了要使用传出 Internet 连接的功能?
  • 我没有构建 dll。它不是解决方案的一部分。所以我无法改变 dll 的构建方式。好点,它可能是导致错误的一些次要依赖!将尽快检查。
  • @vidstige 您现在可能已经解决了这个问题,否则请查看my answer 的相关问题。
  • @AndersGustafsson 我在两者之间换了工作,所以我无法尝试:-S。我很确定这是我尝试的第一件事。

标签: .net pinvoke native windows-8 windows-runtime


【解决方案1】:

将它添加到您的项目中(右键单击项目,添加,现有项目。)检查该项目的属性中,内容设置为 True(默认为 false。)构建。

【讨论】:

  • 感谢您的回答。这适用于普通的 c# 环境,但我尝试过,但无法让它在 Metro-project 上运行。
  • 描述“不工作” - 编译错误?启动时出现神秘绿屏?运行时抛出异常?
  • 我用特定的错误消息更新了问题!调用具有 P/Invoke 属性的方法时会引发异常。
【解决方案2】:

这可能是设计使然。您的问题可能是由从 LoadLibrary 返回的错误代码 126 的错误引起的。 如果您的应用程序在桌面模式下运行,您应该为您的应用程序定位桌面模式。您也可以使用早期版本的 Windows。

【讨论】:

    猜你喜欢
    • 2015-04-12
    • 2015-03-17
    • 1970-01-01
    • 2010-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-25
    • 2011-01-25
    相关资源
    最近更新 更多