A.P*_*cat 5 c++ android shared-libraries visual-studio
这是我第一次尝试为Android/iOS创建库c ++.
我正在使用Visual Studio 2015 - Xamarin.
首先,我创建了一个项目:Visual C++ - >跨平台 - >共享库.在hared库中,我创建了2个文件.
SayHello.h:
#pragma once
#include <string.h>
class SayHello {
public:
SayHello();
~SayHello();
static char* Hello();
};
Run Code Online (Sandbox Code Playgroud)
SayHello.cpp:
#include "SayHello.h"
extern "C"
{
SayHello::SayHello(){}
SayHello::~SayHello(){}
char * SayHello::Hello()
{
return "Hello !";
}
}
Run Code Online (Sandbox Code Playgroud)
然后我生成了一个文件libSayHello.so并用xamarin创建了一个Android项目来尝试调用函数hello.有我的MainActivity.cs:
[DllImport("libSayHello.so")]
static extern String Hello();
protected override void OnCreate(Bundle bundle)
{
// I paste only my added code :
String hello = Hello();
Toast.MakeText(this.ApplicationContext, hello, ToastLength.Long);
}
Run Code Online (Sandbox Code Playgroud)
我完成了本教程中的所有步骤,但我有一个例外:
System.DllNotFoundException:libSayHello.so
我搜索了这个,但我一定是那么的菜鸟,因为我没找到任何东西.我应该如何使用我的libSayHello.so?
编辑:
我libSayHello.so见过7zip:
我的项目:
我认为这将是最适合您的示例。
这一切都按照以下方案进行:
Android支持7种CPU架构。
但 Xamarin 支持其中 5 个。因此,在 Xamarin.Android 项目的设置中检查您将支持哪些架构:
[Xamarin.Droid.project]->[Properties]->[Android Options]->[Advanced]->[Supported architectures]
检查您的项目需要哪些拱门。据此,您的共享库应该针对这些架构进行编译。您应该将共享库放在 Xamarin.Droid.project 的文件夹 lib 中:
要在解决方案资源管理器中查看它们,您应该在 Xamarin.Android 项目的.CSPROJ中提及它们。
添加下一个项目组:
<ItemGroup>
<AndroidNativeLibrary Include="lib\{ARCH}\libCLib.so">
<Abi>{ARCH}</Abi>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</AndroidNativeLibrary>
</ItemGroup>
{ARCH} 可能是下一个:armeabi、armeabi-v7a、arm64-v8a、x86、x86_64。
现在您可以将DllImport放入您的代码中:
[DllImport("libCLib", EntryPoint = "clib_add")]
public static extern int Add(int left, int right);
Run Code Online (Sandbox Code Playgroud)
我认为您必须讲述入口点,因为如果没有此语句System.EntryPointNotFoundException ,我会出现运行时错误。
并且不要忘记在代码中添加 next :
using System.Runtime.InteropServices;
| 归档时间: |
|
| 查看次数: |
1023 次 |
| 最近记录: |