Как использовать Java для вызова библиотеки C #, которая вызывает собственную библиотеку C

#java #c# #android #c #ps3

#java #c# #Android #c #ps3

Вопрос:

Я пытаюсь создать приложение для Android для «редактирования в реальном времени» на Playstation, и это зависит от работы 2 библиотек. Одна из которых закодирована на C #, а другая — на родном C . Библиотека C # использует функцию Importdll для выполнения вызовов собственного кода C , который, в свою очередь, взаимодействует с PS3.

Пример:

 [DllImport("CCAPI.dll", EntryPoint="_ZN5CcApi13getDllVersionEv", CallingConvention=CallingConvention.Cdecl)]
    private static extern int getDllVersion();
    public int GetDllVersion()
    {
        return getDllVersion();
    }
  

Проблема: библиотека C не является открытым исходным кодом. И я не думаю, что возможно использовать JNI для вызова методов в библиотеке C без добавления заголовка Java. (Извините, если это звучит немного глупо, я буквально 1-й ДЕНЬ новичка в JAVA).

Мне просто было интересно, могу ли я создать Java-версию PS3Lib (javaplugin), чтобы она могла работать с CCAPI.dll .

Библиотека C #: PS3Lib.dll http://www.mediafire.com/download/chsvllkrmvb56vi/PS3Lib4.4.2.1.dll Библиотека C : CCAPI.dll http://www.mediafire.com/download/k5x3c1s6z26cuzt/CCAPI2.50.dll

Спасибо, я ценю любого, кто хотя бы читает это. Мы будем признательны за любую обратную связь.

Комментарии:

1. На Android нет встроенной поддержки среды выполнения .net. Возможно, вы сможете заставить ее работать с помощью инструментов из Xamarin ; но они не бесплатны для коммерческого использования, и я не знаю, позволяют ли они запускать двоичные файлы .net или работать путем перекрестной компиляции кода C # в Java для запуска на Android. (В последнем случае они не помогут.)

2. Я фактически создал библиотеку для этого в XAMARIN. 😀 Но дело в том, что я не могу разрабатывать в XAMARIN, поскольку даже приложение hello world не работает, потому что оно продолжает принудительно закрываться … :/ (я думаю, что это ошибка .dll.) @DanNeely

3. задавая новый вопрос о сбоях Xamarin, вы можете получить помощь в этом. Я никогда не использовал ее, поэтому не могу дать никаких прямых советов.

Ответ №1:

Нашел нужный мне ответ. Вы должны использовать JNI (Java Native Interface), чтобы обернуть библиотеку C # и вызвать методы C .

Комментарии:

1. В качестве дополнительного примечания: github.com/Encapsulate/JRTE Я использовал это, реализованное в этом, которое я сделал с открытым исходным кодом.