Вопрос

Я был занят созданием обертки JNA около x264.dll. У меня есть следующий класс для моего x264_param_t:

http://pastebin.com/mh4jkvpp

Однако, когда я пытаюсь инициализировать свой x264_param_t

x264_param_t param_t = new x264_param_t;

Я получаю следующую ошибку:

Exception in thread "main" java.lang.IllegalArgumentException: Can't determine size of nested structure: Can't instantiate class anotherReversed.x264_param_t$Vui (java.lang.InstantiationException: anotherReversed.x264_param_t$Vui)
        at com.sun.jna.Structure.calculateSize(Structure.java:790)
        at com.sun.jna.Structure.allocateMemory(Structure.java:287)
        at com.sun.jna.Structure.<init>(Structure.java:177)
        at com.sun.jna.Structure.<init>(Structure.java:167)
        at com.sun.jna.Structure.<init>(Structure.java:163)
        at com.sun.jna.Structure.<init>(Structure.java:154)
        at anotherReversed.x264_param_t.<init>(x264_param_t.java:7)

Если я прокомментирую VUI в его конструкторе родительского класса, экземпляр в порядке. Интересно, что отличается именно от этой вложенной структуры, так как есть еще 2 других (а именно RC и анализ), которые вложены одинаково. Каким -то образом, однако, JNA не может найти необходимый размер для VUI. Есть указатели?

РЕДАКТИРОВАТЬ: Похоже, что все остальные вложенные структуры (анализ и RC) также не были инициализированы. Интересно, почему?

Это было полезно?

Решение

Вместо того, чтобы комментировать VUI, замените его указателем и проверьте, заполняются ли две другие структуры.

Эти структуры определяются как внутренние структуры в структуре x264_param_t, возможно, у JNA есть проблемы с ним. Посмотрите на вывод x264_param_t.tostring (), так как он печатает расчетные смещения памяти.

Надеюсь, вы найдете лучшие ответы на JNA список рассылки

РЕДАКТИРОВАТЬ Грязный взлом для решения проблемы: используйте массив INT или просто сбрасывайте все переменные из внутренней структуры вместо использования отдельного класса.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top