JNA에서 기본 유형의 배열을 포함하는 구조체를 전달하는 방법은 무엇입니까?

rkjt50r983

나는 초보 JNA 개발자 이므로이 질문이 사소한 경우 용서해주십시오.하지만 JNA와 함께 float 배열을 포함하는 C-lang struct 객체를 처리하는 데 어려움을 겪고 있습니다. 현재 컴파일 오류가 발생했습니다.

문제는 FloatByReference 인스턴스 ( mys.Weights) 를 초기화하고 mystruct 클래스 인스턴스 ( mys)에 할당하는 잘못된 방법이라고 생각하며 JNAerator가 자동으로 생성했기 때문에 아래의 Java 코드를 수정해서는 안된다고 생각합니다.

내 C 코드 :

typedef struct
{
  int n;
  float *Weights;
} mystruct;

void testfunc(mystruct* mys){
  printf(mys->Weights[0]);
}

public interface CLibrary extends Library {
    public static final String JNA_LIBRARY_NAME = "test";
    public static final NativeLibrary JNA_NATIVE_LIB = NativeLibrary.getInstance(CLibrary.JNA_LIBRARY_NAME);
    public static final CLibrary INSTANCE = (CLibrary)Native.loadLibrary(CLibrary.JNA_LIBRARY_NAME, CLibrary.class);

및 Java :

public interface CLibrary extends Library {
    public static final String JNA_LIBRARY_NAME = "test";
    public static final NativeLibrary JNA_NATIVE_LIB = NativeLibrary.getInstance(CLibrary.JNA_LIBRARY_NAME);
    public static final CLibrary INSTANCE = (CLibrary)Native.loadLibrary(CLibrary.JNA_LIBRARY_NAME, CLibrary.class);


    public static class mystruct extends Structure {
        public int n;
        public FloatByReference Weights;
        protected List<? > getFieldOrder() {
            return Arrays.asList("n", "Weights");
        }
        public mystruct(int n, JnaeratorTestLibrary.feature_t.ByReference Features, FloatByReference Weights) {
            super();
            this.n = n;
            this.Features = Features;
            this.Weights = Weights;
        }
        public mystruct(Pointer peer) {
            super(peer);
        }
        public static class ByReference extends mystruct implements Structure.ByReference {

        };
        public static class ByValue extends mystruct implements Structure.ByValue {

        };
    };
    void testfunc(CLibrary.mystruct mys);
}

public static void main(String[] args) {
    mystruct mys = new mystruct();
    mys.n = 10;
    mys.Weights = new FloatByReference();
    // Compile error raises.
    mys.Weights = new float[4]; mys.Weights[0] = 1.0;

    testfunc(mys);
}

컴파일 오류 메시지 :

유형 불일치 : float []에서 FloatByReference로 변환 할 수 없습니다.

기술

를 사용한 Pointer다음을 사용 Pointer.getFloatArray(0, n)하여 원하는 데이터를 추출하십시오.

해당 메모리를 구조 필드에 할당하기 전에 네이티브 메모리에 Java 기본 부동 소수점 배열을 작성하는 데 할당 Memory하고 사용해야 Memory.write()합니다.

FloatByReference기본적으로 하나의 할당 된 float에 대한 포인터 입니다. JNAerator는 단순히 단일 부동 소수점에 대한 포인터와 부동 소수점 버퍼에 대한 포인터 간의 차이를 구분할 수 없습니다 (추가 컨텍스트 없이는 사람도 할 수 없음).

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

배열을 포함하는 구조체를 CUDA의 커널에 전달하는 방법은 무엇입니까?

분류에서Dev

고정 크기 배열 유형의 함수 인수에 포인터를 전달하는 방법은 무엇입니까?

분류에서Dev

구조체에 대한 포인터를 보유하는 전역 배열을 초기화하는 방법은 무엇입니까?

분류에서Dev

Java에서 객체 배열을 포함하는 객체의 깊은 사본을 구현하는 방법은 무엇입니까?

분류에서Dev

Java에서 객체 배열을 포함하는 객체의 깊은 사본을 구현하는 방법은 무엇입니까?

분류에서Dev

배열을 구성원으로 갖는 구조체 배열을 전달하기 위해 C에서 C #을 호출하는 방법은 무엇입니까?

분류에서Dev

구조체의 포인터 배열에 구조체를 할당하는 방법은 무엇입니까?

분류에서Dev

구조체의 배열 청크에 대해 반복기를 구현하는 방법은 무엇입니까?

분류에서Dev

뷰가로드되기 전에 CSS를 포함하는 PHP 파일로 컨트롤러에서 배열을 전달하는 방법은 무엇입니까?

분류에서Dev

구조체 배열에 기본 부동 소수점 값을 초기화하는 방법은 무엇입니까?

분류에서Dev

관리되지 않는 내보내기 (Robert Giesecke)를 사용하여 .NET에서 Delphi로 dateTime 유형 배열을 전달하는 방법은 무엇입니까?

분류에서Dev

함수에 대한 참조로 구조체 배열을 전달하는 방법은 무엇입니까?

분류에서Dev

객체를 ecmascript의 함수에 기본 인수로 전달하는 방법은 무엇입니까?

분류에서Dev

멤버 함수에 동적 구조체 배열을 전달하는 방법은 무엇입니까?

분류에서Dev

JNA의 구조에 포인터를 전달하는 방법은 무엇입니까?

분류에서Dev

다른 구조체에서 구조체 배열을 초기화하는 방법은 무엇입니까?

분류에서Dev

c에서 구조체 배열을 전역으로 초기화하는 방법은 무엇입니까?

분류에서Dev

Rust에서 바이트 배열을 기본 유형으로 캐스팅하는 방법은 무엇입니까?

분류에서Dev

문자열을 사용하여 다양한 크기의 배열에 대한 구조체를 디자인하는 방법은 무엇입니까?

분류에서Dev

Drop을 구현하는 구조체에서 Default를 구현하지 않는 유형의 필드를 이동하는 방법은 무엇입니까?

분류에서Dev

문자열 반복기 변수를 C ++의 함수에 전달하는 방법은 무엇입니까?

분류에서Dev

Java에서 1 개의 기본 배열 / 문자열을 생성하기 위해 배열의 인덱스를 병합하는 방법은 무엇입니까?

분류에서Dev

unsigned char 배열을 포함하는 구조체 배열에 대한 포인터를 마샬링하는 방법은 무엇입니까?

분류에서Dev

구조체를 포함하는 대기열을 올바르게 지우는 방법은 무엇입니까?

분류에서Dev

구조체에서 배열을 변형하는 가장 좋은 방법은 무엇입니까?

분류에서Dev

C에서 구조체 유형의 배열의 모든 요소를 올바르게 인쇄하는 방법은 무엇입니까?

분류에서Dev

WordPress의 JavaScript 함수에서 이미지 경로를 배열로 전달하는 방법은 무엇입니까?

분류에서Dev

C ++의 함수에서 배열 요소를 매개 변수로 전달하는 방법은 무엇입니까?

분류에서Dev

구조체의 멤버 이름을 C ++를 사용하여 함수에 인수로 전달하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    배열을 포함하는 구조체를 CUDA의 커널에 전달하는 방법은 무엇입니까?

  2. 2

    고정 크기 배열 유형의 함수 인수에 포인터를 전달하는 방법은 무엇입니까?

  3. 3

    구조체에 대한 포인터를 보유하는 전역 배열을 초기화하는 방법은 무엇입니까?

  4. 4

    Java에서 객체 배열을 포함하는 객체의 깊은 사본을 구현하는 방법은 무엇입니까?

  5. 5

    Java에서 객체 배열을 포함하는 객체의 깊은 사본을 구현하는 방법은 무엇입니까?

  6. 6

    배열을 구성원으로 갖는 구조체 배열을 전달하기 위해 C에서 C #을 호출하는 방법은 무엇입니까?

  7. 7

    구조체의 포인터 배열에 구조체를 할당하는 방법은 무엇입니까?

  8. 8

    구조체의 배열 청크에 대해 반복기를 구현하는 방법은 무엇입니까?

  9. 9

    뷰가로드되기 전에 CSS를 포함하는 PHP 파일로 컨트롤러에서 배열을 전달하는 방법은 무엇입니까?

  10. 10

    구조체 배열에 기본 부동 소수점 값을 초기화하는 방법은 무엇입니까?

  11. 11

    관리되지 않는 내보내기 (Robert Giesecke)를 사용하여 .NET에서 Delphi로 dateTime 유형 배열을 전달하는 방법은 무엇입니까?

  12. 12

    함수에 대한 참조로 구조체 배열을 전달하는 방법은 무엇입니까?

  13. 13

    객체를 ecmascript의 함수에 기본 인수로 전달하는 방법은 무엇입니까?

  14. 14

    멤버 함수에 동적 구조체 배열을 전달하는 방법은 무엇입니까?

  15. 15

    JNA의 구조에 포인터를 전달하는 방법은 무엇입니까?

  16. 16

    다른 구조체에서 구조체 배열을 초기화하는 방법은 무엇입니까?

  17. 17

    c에서 구조체 배열을 전역으로 초기화하는 방법은 무엇입니까?

  18. 18

    Rust에서 바이트 배열을 기본 유형으로 캐스팅하는 방법은 무엇입니까?

  19. 19

    문자열을 사용하여 다양한 크기의 배열에 대한 구조체를 디자인하는 방법은 무엇입니까?

  20. 20

    Drop을 구현하는 구조체에서 Default를 구현하지 않는 유형의 필드를 이동하는 방법은 무엇입니까?

  21. 21

    문자열 반복기 변수를 C ++의 함수에 전달하는 방법은 무엇입니까?

  22. 22

    Java에서 1 개의 기본 배열 / 문자열을 생성하기 위해 배열의 인덱스를 병합하는 방법은 무엇입니까?

  23. 23

    unsigned char 배열을 포함하는 구조체 배열에 대한 포인터를 마샬링하는 방법은 무엇입니까?

  24. 24

    구조체를 포함하는 대기열을 올바르게 지우는 방법은 무엇입니까?

  25. 25

    구조체에서 배열을 변형하는 가장 좋은 방법은 무엇입니까?

  26. 26

    C에서 구조체 유형의 배열의 모든 요소를 올바르게 인쇄하는 방법은 무엇입니까?

  27. 27

    WordPress의 JavaScript 함수에서 이미지 경로를 배열로 전달하는 방법은 무엇입니까?

  28. 28

    C ++의 함수에서 배열 요소를 매개 변수로 전달하는 방법은 무엇입니까?

  29. 29

    구조체의 멤버 이름을 C ++를 사용하여 함수에 인수로 전달하는 방법은 무엇입니까?

뜨겁다태그

보관