JNA(四)字符串操作一

本文详细介绍了如何使用C语言和Java通过JNA进行动态库的set和get操作,包括C语言中的函数实现以及Java中的Library接口应用。


前言

关于环境和dll的生成,不懂的同学可以去查看JNA(一)与JNA(二)的内容
后续的内容都是以set和get进行:
所谓set,就是往动态库中发送;而get就是从动态库中获取


使用

1.C语言代码

头文件(library.h)

#ifndef CDYNAMICDEMO_LIBRARY_H
#define CDYNAMICDEMO_LIBRARY_H

#include <string.h>
#include <stdlib.h>

// 字符串的基本操作
void setString(char *text);

void getString(char **texts);

void cleanString(char *text);

#endif //CDYNAMICDEMO_LIBRARY_H

代码文件(library.c)

#include "library.h"
#include <stdio.h>

void setString(char *text) {
    printf("\n接收到字符串: %s", text);
}

void getString(char **texts) {
    // C语言中字符串的末尾是:\0
    int len = 10;
    // 一个类型用了三个关键字!
    unsigned long long size = sizeof(char) * len;
    *texts = malloc(size);
    memset(*texts, 0, size);
    strcpy(*texts, "HelloHel中");
}

void cleanString(char *text) {
    free(text);
    printf("\n清理字符串");
}

2.java代码

package com.dynamic.demo.strings;

import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Platform;
import com.sun.jna.Pointer;
import com.sun.jna.ptr.PointerByReference;

public interface StringLibrary extends Library {
    StringLibrary INSTANCE = Native.load(Platform.isWindows() ? "libCDynamicDemo" : "", StringLibrary.class);

    void setString(String text);

    void getString(PointerByReference reference);

    void cleanString(Pointer pointer);

    public static void main(String[] args) {
        StringLibrary.INSTANCE.setString("hello 中文!");

        PointerByReference reference = new PointerByReference();
        StringLibrary.INSTANCE.getString(reference);
        Pointer pointer = reference.getValue();
        // 从第一个字符开始输出
        String text = pointer.getString(0);
        System.out.println(text);

        StringLibrary.INSTANCE.cleanString(pointer);
    }
}

3.查看输出

在这里插入图片描述

4.代码比较

在这里插入图片描述


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值