gpt4 book ai didi

java - 使用 JNA 访问包含 vector 的结构

转载 作者:太空狗 更新时间:2023-10-29 22:54:37 29 4
gpt4 key购买 nike

我有一个 C++ 库,它使用一个包含 vector 的结构。我在确定通过 JNA 从 Java 访问它的正确方法时遇到了一些困难。

我的 C++ 结构:

#include <vector>

struct topic {
char* src_id;
char* dest_id;
int32_t num;
std::vector<char*> names;
};

我的 Java 类:

public final class Topic extends Structure {

public String src_id;
public String dest_id;
public int num;
public String[] names; // This doesn't work

public Topic() {

}

@Override
protected List<String> getFieldOrder() {
return Arrays.asList(new String[] { "src_id", "dest_id", "num", "names" });
}

}

最佳答案

这个解决方案对我有用:

package com.example;

import java.util.Arrays;
import java.util.List;

import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Pointer;
import com.sun.jna.StringArray;
import com.sun.jna.Structure;

public class Example {

public interface CLibrary extends Library {

public static class Topic extends Structure {
public static class ByReference extends Topic implements Structure.ByReference {
}

public String src_id;
public String dest_id;
public int num;

public int numVals;
public Pointer names; // char**

@Override
protected List<String> getFieldOrder() {
return Arrays.asList(new String[] { "src_id", "dest_id", "num", "numVals", "names" });
}
}

public void sendTopic(Topic.ByReference pVal);
}

public static void main(String[] args) {

final CLibrary clib = Native.loadLibrary("example.dll", CLibrary.class);

final String[] myArray = new String[5];
myArray[0] = "one";
myArray[1] = "two";
myArray[2] = "three";
myArray[3] = "four";
myArray[4] = "five";

CLibrary.Topic.ByReference ref = new CLibrary.Topic.ByReference();
ref.numVals = 5;
ref.names = new StringArray(myArray);

clib.sendTopic(ref);
}
}

关于java - 使用 JNA 访问包含 vector<char*> 的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54766965/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com