如何在AS中加载.dll文件(Windows的动态库)

其实这是一个很没有用的操作,为什么这么说呢?因为只要是Android开发的程序员都知道,windows只是一个开发平台(当然也有mac),开发的apk的运行平台是android手机,和windows没有了半毛钱关系。虽然没有用,但是的确可以这么做,主要是在测试代码中进行加载,因为AS的测试代码环境是windows(当然也可能是mac)

1.生成动态库

首先,在VS中创建一个CMakeLists.txt,内容如下

cmake_minimum_required (VERSION 3.8)

#这个是jdk中头文件的路径
include_directories("C:/Program Files/Java/jdk1.8.0_181/include")
include_directories("C:/Program Files/Java/jdk1.8.0_181/include/win32")

add_library(dll_file SHARED MakeDll.cpp)

include_directores():用来添加头文件的查找路径,这里将jdk中头文件路径添加进去,也不要忘了win32下的头文件

add_library():将相应的cpp文件编译成动态库,第一个参数是动态库的名称,第二个参数是动态库的标识

 

之后,开始编写cpp文件MakeDll.cpp,内容如下

#include <jni.h>

extern "C"
JNIEXPORT void JNICALL
Java_com_gzc_jni_ExampleUnitTest_test(JNIEnv *env,jobject instance,jint ji,jstring jstr) {
	const char* str = env->GetStringUTFChars(jstr, 0);
	printf("i:%d,jstr:%s",ji,str);
}

这个方法是jni形式的代码,用来和Java代码进行交互

extern "C":因为这是在cpp文件中,所以需要加上这个

void:表示Java代码中交互方法的返回值
com_gzc_jni:是包名com_gzc_jni转换的,将“.”换成“_”即可

ExampleUnitTest:是类名

test:Java代码中交互方法的方法名
jint,jstr:表示Java代码中交互方法的两个参数

之后在CMakeLists.txt进行Ctrl+s,会有如下路径输出,这个路径就是动态库生成的路径

然后再工具栏中点击CMake->全部生成,这样就在上面的路径中成了相应的动态库

有一个地方需要注意,就是下面图中红框的位置,一定要根据自己电脑的位数来选择,我的电脑是64位的,所以选择了x64的

2.在AS中进行测试

在测试代码中写如下代码

public class ExampleUnitTest {
    @Test
    public void addition_isCorrect() throws Exception {
        System.load("C:\\Users\\codef\\CMakeBuilds\\32264e14-e3b0-ea31-94a0-076eb1e44d47\\build\\x64-Debug\\dll_file.dll");
        test(10,"java_jni");
    }

    native void test(int i,String j);
}

可以看见类名ExampleUnitTest和test是和MakeDll.cpp中的代码相互对应的

运行后输出如下的结果

 

非常完美!只是目前没有找到应用场景,囧

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
iTunesMobileDevice.dll 是苹果公司提供的一个动态链接,用于管理 iOS 设备与计算机之间的通信,其中包括设备备份、文件传输、应用程序安装等功能。在易语言中调用 iTunesMobileDevice.dll 可以实现与 iOS 设备的交互,例如读取设备信息、备份数据等。 以下是一个简单的示例代码,演示如何在易语言中调用 iTunesMobileDevice.dll: ```vb ' 加 iTunesMobileDevice.dll Declare Function AMDeviceNotificationSubscribe Lib "iTunesMobileDevice.dll" _ (ByVal callback As Long, ByVal unused1 As Long, ByVal unused2 As Long, _ ByRef notification As Long) As Long ' 定义回调函数 Function AMDeviceNotificationCallback(ByVal ptr As Long, ByVal arg As Long) As Long ' 处理设备连接事件 End Function ' 订阅设备连接通知 Dim notification As Long AMDeviceNotificationSubscribe(AddressOf AMDeviceNotificationCallback, 0, 0, notification) ' 处理设备连接事件的回调函数 Function AMDeviceNotificationCallback(ByVal ptr As Long, ByVal arg As Long) As Long ' 处理设备连接事件 End Function ``` 需要注意的是,由于 iTunesMobileDevice.dll 是一个 C 语言编写的动态链接,其函数参数和返回值都是原始类型,需要按照 C 语言的规则进行声明和调用。在以上示例代码中,使用 Declare 关键字声明了函数原型,并使用 AddressOf 关键字将回调函数的地址传递给 AMDeviceNotificationSubscribe 函数。在回调函数中,需要按照 C 语言的规则进行参数解析和返回值处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值