【问题标题】:How can I use dllmap on Xamarin.Android and Xamarin.iOS?如何在 Xamarin.Android 和 Xamarin.iOS 上使用 dllmap?
【发布时间】:2015-04-13 06:10:27
【问题描述】:

我正在使用 Xamarin.Android,有一个像这样设置的项目

  • Windows 原生库 (NativeMethods.dll)
  • Android 原生库 (NativeMethods.so)
  • 可移植的 P/Invoke 库,DllImport 到 NativeMethods.dll
  • Windows 应用程序(使用可移植的 P/Invoke 库 + Windows 原生库)
  • Android 应用程序(使用可移植的 P/Invoke 库 + Android 原生库)

使用单声道,可以简单地使用 App.config 中的dllmap 将任何 DllImports 重新映射到 NativeMethods.dll 到 NativeMethods.so

我试过了,但我似乎无法让它与 Xamarin.Android 一起使用。我想避免编译两个 MSIL P/Invoke 库以及两个本机库(Android 和 Windows 各一个)。

这是我的 app.config 的样子

  <?xml version="1.0" encoding="utf-8" ?>
  <configuration>
    <dllmap dll="NativeMethods.dll" target="NativeMethods.so"/>
  </configuration>

我在 P/Invoke DLL 项目、Xamarin.Android 应用程序项目中尝试了这个,但它在任何地方都不起作用。我发现我的问题的唯一参考是this iOS 的类似参考。有没有人遇到/解决过这个问题?我错过了什么?如果为 Xamarin.iOS 执行此操作的解决方案有什么不同,我也会感兴趣,因为这将是我需要定位的下一个平台。

提前致谢!

【问题讨论】:

    标签: c# mono xamarin.ios xamarin.android dllimport


    【解决方案1】:

    使用NativeMethods(不带扩展名)作为库的名称。

    .NET 会在搜索库时自动附加 .dll,而 Mono 会自动附加 .so

    但是对于 iOS,您需要一个 dllmap(因为库名称必须是 __Internal

    来源:http://www.mono-project.com/docs/advanced/pinvoke/

    【讨论】:

    • 我不确定 dllmap 是否适用于 iOS。你使用成功了吗?
    • @ananthonline:我没有亲自尝试过,没有。如果您有问题,请随时提交带有测试用例的错误 (bugzilla.xamarin.com),因为它应该可以工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多