C++ 动态库的封装和调用的步骤(封装类)

基于Visual Studio环境封装dll

先创建一个新项目,空项目,控制台,动态链接库都可以,演示是在空项目下进行,
在这里插入图片描述在这里插入图片描述
添加源文件和头文件,对类进行封装,类名和自己定义
在这里插入图片描述
在这里插入图片描述
下面是头文件和源文件的源码

    #include "ExDll.h"

double ExDll::addFunction(double num1, double num2)
{
    return (num1 + num2);
}

double ExDll::subFunction(double num1, double num2)
{
    return (num1 - num2);
}

#pragma once
#include <iostream>

class __declspec(dllexport) ExDll
{
public:
    static double addFunction(double num1, double num2);
    static double subFunction(double num1, double num2);

};

右击项目点击属性配置类型改为动态库,然后点击编译会在release下生成四个文件,其中lib和dll是需要用的
在这里插入图片描述在这里插入图片描述
以上就是我们动态库的封装,下面进行调用

动态库的调用

下面我们创建一个c++控制台项目,方便打印输出,创建成功可以先编译一下;
在这里插入图片描述
刚才上面生成的mydll.lib和mydll.dll文件copy到控制台项目的release下面;ExDll.h文件copy到运行目录下
在这里插入图片描述
控制台工程中配置附件包含目录为生成dll的目录;
在这里插入图片描述
配置附加依赖项mydll.lib;
在这里插入图片描述
配置附加库目录为lib的目录
在这里插入图片描述
到这里动态库的配置都全部完成;
下面直接调用封装类的函数cpp文件

#include <iostream>
#include "ExDll.h"

int main()
{
    double add = ExDll::addFunction(100, 200);
    double sub = ExDll::subFunction(100, 200);
    std::cout << "add:" << add << std::endl;
    std::cout << "sub:" << sub << std::endl;
    return 0}

输出结果;
在这里插入图片描述
以上是简单的类封装和调用,无论多复杂的封装和调用,步骤都是一样的;感谢关注

  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是详细的步骤: 1. 准备工作 在开始之前,需要确保系统中已经安装了 JDK 和 Android NDK,并且已经配置好了环境变量。 2. 创建 C++ 库文件 在任意目录下创建一个 C++ 文件,例如 `native-lib.cpp`,并编写相应的 C++ 代码。 3. 创建 JNI 接口函数 在 C++ 文件中创建 JNI 接口函数,例如: ```c++ #include <jni.h> #ifdef __cplusplus extern "C" { #endif JNIEXPORT jstring JNICALL Java_com_example_NativeUtils_getMessage(JNIEnv *env, jobject thiz) { const char *message = "Hello from C++!"; return env->NewStringUTF(message); } #ifdef __cplusplus } #endif ``` 其中,`Java_com_example_NativeUtils_getMessage` 是 JNI 接口函数,`getMessage` 是 Java 层调用的方法名,`com_example_NativeUtils` 是 Java 的全限定名。 4. 编译 C++ 库文件 使用 NDK 自带的工具链将 C++ 文件编译成动态链接库,例如: ```shell gcc -shared -fpic -o libnative-lib.so native-lib.cpp ``` 其中,`-shared` 选项表示编译成动态链接库,`-fpic` 表示编译为位置独立代码,`-o` 指定输出文件名。 5. 创建 Java 在 Android Studio 中创建一个 Java ,例如: ```java public class NativeUtils { static { System.loadLibrary("native-lib"); } public static native String getMessage(); } ``` 其中,`loadLibrary` 方法用于加载本地库,`getMessage` 方法对应本地方法。 6. 生成头文件 使用 JDK 自带的工具 javah 生成 JNI 头文件,例如: ```shell javah -classpath <项目路径>/app/build/intermediates/classes/debug -d <jni头文件输出路径> com.example.NativeUtils ``` 其中,`<项目路径>` 表示项目的绝对路径,`<jni头文件输出路径>` 表示 JNI 头文件的输出路径,`com.example.NativeUtils` 表示 Java 的全限定名。 7. 实现 JNI 接口函数 在 JNI 头文件中实现 JNI 接口函数,例如: ```c++ #include <jni.h> JNIEXPORT jstring JNICALL Java_com_example_NativeUtils_getMessage(JNIEnv *env, jclass clazz) { const char *message = "Hello from C++!"; return env->NewStringUTF(message); } ``` 其中,`Java_com_example_NativeUtils_getMessage` 是 JNI 接口函数,`getMessage` 是 Java 层调用的方法名,`com_example_NativeUtils` 是 Java 的全限定名。 需要注意的是,JNI 接口函数的第一个参数是 `JNIEnv` 指针,第二个参数是 `jclass` 或 `jobject` 指针,分别表示当前调用的 Java 或 Java 对象。 8. 将 JNI 库文件加入 Android 项目 将编译好的动态链接库文件复制到 Android 项目的 `app/src/main/jniLibs/<架构>` 目录下,其中 `<架构>` 表示目标设备的架构,例如 `arm64-v8a`。 9. 在 Android 项目中调用 JNI 方法 在 Android 项目中调用 JNI 方法,例如: ```java String message = NativeUtils.getMessage(); ``` 10. 编译运行 Android 项目 编译并运行 Android 项目,即可在应用中使用 C++ 封装的 JNI 接口函数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值