我如何在Xamarin.Android和Xamarin.iOS上使用dllmap?

我正在使用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应用程序项目中尝试了此操作,但是它在任何地方都无法使用.我发现的唯一参考是针对iOS的this类似参考.有没有人遇到/解决过这个问题?我想念什么?我也想知道针对Xamarin.iOS的解决方案是否有所不同,因为这将是我需要定位的下一个平台.

提前致谢!

解决方法:

使用NativeMethods(无扩展名)作为库的名称.

搜索该库时,.NET将自动附加.dll,而Mono将自动附加.so.

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

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

上一篇:如何在C#代码中访问C DLL类


下一篇:如何将类从C代码返回到C#