Как написать оболочку Java JNI для набора функций библиотеки Pascal?

Есть определенная библиотека, которую я хотел бы использовать из Java.

Сама библиотека написана на Паскале и скомпилирована в DLL. У меня есть доступ для чтения ко всему соответствующему исходному коду (он бесплатный и с открытым исходным кодом), но маловероятно, что я смогу повлиять на какие-либо предложения по изменению исходного кода библиотеки. У меня очень мало знаний или опыта в Паскале. Сама библиотека в определенной степени занимается передачей и возвратом структур в память. (Если бы это был C, функции принимали бы и возвращали указатели на структуры. К сожалению, я не знаю эквивалентных имен в Pascal.)

Я хотел бы сделать Java-оболочку для этой библиотеки. Я хотел бы иметь возможность вызывать эти функции. Я прочитал несколько руководств по собственному интерфейсу Java. Что имеет некоторый смысл, так это то, как взаимодействовать с этими функциями. Что для меня не имеет смысла, так это то, как я должен обращаться с этими структурами в памяти.

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

Спасибо вам всем.


person Ming    schedule 30.11.2010    source источник
comment
Уточнение: я хочу прочитать данные из этой структуры, а также передать их обратно в другие вызовы функций.   -  person Ming    schedule 30.11.2010
comment
Какой компилятор Pascal используется для создания DLL? Ранее я вызывал DLL, скомпилированную в Delphi, из C и DLL, скомпилированную в C, из Delphi, и это довольно просто. В большинстве случаев записи Pascal очень похожи на структуры C, поэтому, если вы выбираете правильный тип, чтобы число байтов совпадало для каждого поля, все должно быть в порядке. Струны могут быть намного интереснее, так как существует множество их разновидностей...   -  person John Pickup    schedule 30.11.2010
comment
Поэтому я бы предложил написать некоторый тестовый код на C, чтобы увидеть, можете ли вы вызывать функции DLL и передавать структуры. Как только это произойдет, у вас будут подписи C, чтобы начать работать с вызовами JNI.   -  person John Pickup    schedule 30.11.2010


Ответы (1)


Основываясь на своем опыте, я бы избегал JNI (слишком сложно) и вместо этого использовал JNA.

person aksarben    schedule 01.12.2010