Pra*_*eek 5 c# c++ xamarin.android xamarin.forms
我有 Xamarin Forms 跨平台项目 - Android、iOS 和 UWP。我有一个 C++ DLL 项目,我从中创建了一个 DLL。我的目的是在 Xamarin 表单中集成/调用这些 C++ 代码。我知道如何使用DLLImport程序集指令从 C# 控制台应用程序调用 C++,但在 Xamarin 上我得到DllNotFoundException.
那么必须在哪里复制或引用 DLL 文件才能使其发挥作用呢?
.dllDebug 文件夹中的其他文件(当前项目正在尝试引用 DLL。(我引用了此视频,它适用于 C# 控制台)System.DllNotFoundException. DllNotFoundException。C++
#include "stdafx.h"
extern "C"{
__declspec(dllexport) int add(int a, int b)
{
return a + b;
}
__declspec(dllexport) int subtract(int a, int b)
{
return a - b;
}
}
Run Code Online (Sandbox Code Playgroud)App.xaml.cs 或任何其他 .Net 标准共享项目
public partial class App : Application
{
[DllImport("Dll1.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int subtract(int a, int b);
[DllImport("Dll1.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int add(int a, int b);
[DllImport("XamCppDll.Shared.so")]
public static extern int cpp_GetValue(int a, int b);
public App()
{
InitializeComponent();
int x = 100;
int y = 15;
int z = 0;
int z1 = 0;
try
{
cpp_GetValue(5, 6);//XamCppDll.Shared.so
z = subtract(x, y);//Dll1.dll
z1 = add(x, y);//Dll1.dll
}
catch (System.Exception ex1)
{
Debug.WriteLine(ex1.Message);
}
Debug.WriteLine(" {0} - {1} = {2}", x, y, z);
Debug.WriteLine(" {0} + {1} = {2}", x, y, z1);
MainPage = new MainPage();
}
Run Code Online (Sandbox Code Playgroud)
}
https://blogs.msdn.microsoft.com/vcblog/2015/02/23/developing-xamarin-android-native-applications/
我花了很多时间和测试后发现了这个问题。
为了加载库,C++ 应打包为.soAndroid 中的(共享对象)扩展。
该文件必须打包并放置在.apkandroid.app 中。
将 .so 与 android ABI 链接
选项 1:创建lib/abi_name文件夹并将 .so 文件设置为可以在的AnroidNativeLibrary位置abi_name
选项 2AndroidNativeLibrary :使用带有标签说明符的 Build 操作将 .so 文件添加到 android 项目中<ABI>。在 Android .csproj 文件中添加如下内容。
<ItemGroup>
<AndroidNativeLibrary Include="path/to/libFile.so">
<Abi>armeabi</Abi>
</AndroidNativeLibrary>
Run Code Online (Sandbox Code Playgroud)
如果有人想要工作代码,我已经为此添加了 Github 存储库XamarinNDKSample 。
| 归档时间: |
|
| 查看次数: |
4194 次 |
| 最近记录: |