Tejas Sawant 13 Ответов: 1

Импорт DLL-файла в java-приложение


Всем Привет,

Заранее спасибо.

У меня есть CP52OO.dll файл, который используется для связи с контроллером CP5200. DLL является 32-битной, а 64-битная dll vrsion недоступна. Поставщик не может предоставить то же самое.

Поэтому я импортировал ту же dll в проект c# на 64-битной системе и завершил работу по тестированию контроллера. Тестовая утилита работает нормально.

Теперь проблема в том, что мне нужно общаться с контроллером только с помощью java-приложения. Я попытался сгенерировать c# dll и попытался импортировать ее в java-приложение,но мне не удалось импортировать и эту dll.

Теперь я наконец пришел к выводу, что мне нужно разработать службу windows в .net с использованием кода c#, и java-приложение вызовет эту службу.

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

Пожалуйста, учитывайте следующие моменты при предоставлении подхода :
1] поскольку 64-битная dll недоступна, я не могу сделать свою прикладную систему java зависимой.
2] код C# работает совершенно нормально. но импорт dll C# в java-приложение также сталкивается с проблемой, так как мы не можем рассматривать c# как модуль.
3] подход должен быть надежным, не должно быть никакой зависимости от системы, время выполнения не должно быть долгим.

Что я уже пробовал:

Я перепробовал все возможные способы загрузки библиотечного файла на java. Но зависимость не может быть удалена, так как dll является 32-битной.

Garth J Lancaster

хорошо, некоторые из ваших требований немного "туманны"..

а) вы говорите, что используете 64-битную JVM, и именно поэтому вы не можете (JNA или JNI) вызвать 32-битную DLL ?
б )что такое контроллер CP5200.dll/CP5200? сколько данных передается в любом направлении, например, сколько функций выполняет CP5200.dll экспорт ?
в) не уверен, почему вы говорите об импорте dll c# в java - зачем вам нужен c# ? у вас, кажется, есть

java-программа - > (что-то) - > CP5200.dll (контроллер CP5200)

и это то самое "что - то", которое вы ищете, но добавление слишком многого в "что-то" может нарушить ваше предложение пункта 3 "надежность" / зависимости

Tejas Sawant 13

Привет Гат Джей Ланкастер,

Спасибо за комментарий.

Пожалуйста, проверьте ниже информацию о ваших запросах

a] Да, я использую 64-битную JVM и не могу импортировать 32-битную dll. Я знаю, что если я буду использовать 32-битную jvm, я могу импортировать dll-файл, но я не хочу добавлять какие-либо зависимости в приложение, как только 32-битная jvm.

b] контроллер CP5200, используемый в оборудовании светодиодных дисплеев. CP5200.dll экспорт нескольких функций для подключения, отключения, отправки текста,отправки изображения, как мудрый.

c] как я обнаружил, что не могу импортировать CP5200.dll на Яве. Затем я попытался импортировать в C#, и мне это удалось. Я успешно вызвал несколько функций, используя код C#. Поэтому я создал новую библиотеку dll C#, которая вызывает функции из CP5200.dll-да. Затем я попытался импортировать dll C# в java-проект, но не смог этого сделать. Поэтому я подумал, что могу создать одну службу windows, используя в настоящее время успешно работающий код C#. Приложение Java будет взаимодействовать с этой службой windows

Да я ищу что-то вроде
Java-приложение- & gt; C# Windows Service -> CP5200.dll

Я не уверен и не уверен в вышеприведенном подходе. Так что спрашивайте мнения и лучший подход.

Garth J Lancaster

Итак, почему " служба Windows C#"?. это еще одна зависимость не так ли

почему нет

Java-приложения --- определенная форма МПК ---&ГТ; С++ 'сервер'/'услуги -&ГТ; CP5200.dll

?

Tejas Sawant 13

Я не совсем уверен в сервисе C#, поэтому я здесь. Мне нужен хороший подход.

Не могли бы вы, пожалуйста, объяснить какую-то форму средств IPC ?

1 Ответов

Рейтинг:
0

Richard MacCutchan

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


Tejas Sawant 13

Я ценю ваши усилия, дающие один и тот же ответ снова и снова. Но я не могу использовать ваш подход, о котором уже упоминал.

Richard MacCutchan

Тогда любезно объясните, в чем именно заключается ваша проблема. Использование DLL из Java через JNI совершенно просто и не требует никакого интерфейса C# или службы Windows, чтобы заставить его работать.

Tejas Sawant 13

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

Richard MacCutchan

Затем запустите его в 32-битной версии; зависимость вызвана DLL, и если поставщик предоставит только 32-битную версию, то у вас нет выбора. Я также несколько смущен, почему вы хотите сделать это в Java, если это уже работает в C#. вы, кажется, полны решимости сделать жизнь более трудной для себя, чем это необходимо.

Tejas Sawant 13

Как вы уже прочитали выше вопрос, эта dll используется для связи со светодиодным оборудованием, у меня есть 10 различных других аппаратных средств, этот код уже написан в основном приложении [JAVA Based], которое взаимодействует со всем оборудованием.

Теперь вы предлагаете мне, как я должен общаться со светодиодным оборудованием из основного приложения.

Richard MacCutchan

Я уже сделал предложения, основанные на предоставленной Вами информации. У вас есть 32-разрядная библиотека DLL, необходимая для доступа к некоторому аппаратному устройству, и вы хотите использовать ее с Java. Ответ тот же, что я дал вам в каждом вопросе по этому вопросу, и вы должны следовать моему предложению. Повторная публикация одного и того же вопроса не изменит фактов.

Tejas Sawant 13

хорошо, я использовал JNA и 32-битную jvm в 64-битной системе. Я могу импортировать dll-файл, способный вызывать все функции. Я использую инструмент eclipse. Код отлично работает в инструменте eclipse. Я экспортировал runnable jar-файл и попытался запустить jar-файл, но jar-файл не может загрузить dll-файл.

Я установил системную переменную java home path также на 32-битные jdk и jre. Та же самая банка, которую я пытался запустить на 32-битной машине, работает гладко.

Любые предложения по этому поводу

Richard MacCutchan

но jar-файл не может загрузить dll-файл.
Извините, но я не могу догадаться, почему это должно произойти. Вам нужно сделать некоторую отладку.