c# - 在 Java Android 项目中使用 C# Dll
问题描述
我想在由 Java(不是 Xamarin 或 Mono)开发的 Android 项目中使用 C# DLL。我解决此问题的第一个策略包含以下步骤:
- 通过 DllExport 从 C# 代码创建一个 C++ 可用的 DLL。(为 C# 代码创建 C++ 包装器)
- 从使用上一步生成的 DLL 的 C++ 项目创建一个 .so 库。
所以我使用了 DLLExport ( https://github.com/3F/DllExport )
C# 方面:
namespace NumbersLibCS
{
public class Math
{
public Math()
{
}
[DllExport]
public static int GetRandomEvenNumber()
{
var rnd = new Random();
int n = rnd.Next(1, 1000 ) * 2;
return n;
}
}
}
但是在 C++ 中要使用生成的 DLL,我认为我应该只使用 Android OS 上不可用的 windows.h 库:
#include <windows.h>
typedef int(__cdecl *GetRandomEvenNumber)();
int main(){
HMODULE lib = LoadLibrary("mycsharp.dll");
auto getRndNumber= (GetRandomEvenNumber)GetProcAddress(lib, "GetRandomEvenNumber");
int c = getRndNumber();
}
现在这是我的问题:
- 如何在没有 windows.h 的情况下使用 DLLExport 生成的 DLL?
- 我可以在不使用 DLLExport 的情况下使用 .NetCore 2.0 来实现这一点吗?
解决方案
推荐阅读
- laravel - Remember users email id after logout - Laravel
- deep-learning - Pytorch using Multi GPU / accuracy is too low(10%)
- uwp - Telerik 的 UWP 的 RadDataGrid 单元格内容文本框绑定
- php - printing unicode in php from MySQL database results in encoding error
- node.js - npm deep audit vulnerability
- ios - position fixed in the iphone X webview
- javascript - Check if a number is a multiple of 0.10
- angular - 通过更改 .filteredData 属性更新 mat-table 内容
- r - Quantmod 包在 R 中传递参数
- encryption - Erlang cookie 与 RabbitMQ 集群中的节点间 TLS 通信