Доступ к функциям в JNI DLL через ColdFusion

Я пытаюсь использовать функцию CreateObject в ColdFusion для доступа к функциям в DLL через JNI. Мне удалось заставить ColdFusion загрузить DLL в порядке, используя функцию java.lang.System.load, но я не уверен, как затем получить доступ к функциям, содержащимся в этом методе.

Мой текущий код:

<cfset CreateObject("java","java.lang.System").load("C://Path//To//JniDll.dll")> 
<cfset JniObject = CreateObject("java","Organisation.product.package")>

Что терпит неудачу в строке 2 с ошибкой

Object Instantiation Exception. 
Class not found Organisation.product.package

Возможно, я неправильно обращаюсь к этим методам, но мне не удалось найти в Интернете никакой информации об использовании JNI в ColdFusion.

Спасибо за вашу помощь,

Том


person Loftx    schedule 17.08.2011    source источник
comment
Что за длл? Есть ли причина, по которой вы не можете использовать createObject(.net) или createObject(com)? help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/   -  person Leigh    schedule 17.08.2011
comment
Привет, Ли, извини, я не понимаю, что ты имеешь в виду под какой dll? Он был предоставлен мне как средство интеграции с конкретным продуктом, который мне нужно использовать в проекте. Провайдер предлагает его как лучший для интеграции со своим проектом с использованием Java. Предположительно невозможно интегрировать любую DLL с использованием объектов .net или com - я предположил, что это было специально написано для JNI.   -  person Loftx    schedule 17.08.2011
comment
Я просто имел в виду, предоставляют ли они .net (или даже com) dll, который можно использовать с createObject(). Ничего не зная о продукте, это может быть глупым вопросом;)   -  person Leigh    schedule 18.08.2011
comment
Привет Ли, насколько мне известно, они предоставляют только стандартную DLL, к которой могут получить доступ C и т. Д., И DLL-оболочку JNI, которую я пытаюсь использовать.   -  person Loftx    schedule 18.08.2011


Ответы (2)


Вы не получите доступ к методам в этой DLL, просто зарегистрировав ее AFAIK. Либо вы получаете оболочку Java (возможно, в виде JAR), которая затем будет использовать DLL, либо вам нужно посмотреть, какие COM-интерфейсы предоставляет DLL, и вызвать их через createobject(type="COM"), как предлагали другие.

Судя по вашему коду и ошибке, вы ожидаете, что класс Java Organization.product.package будет присутствовать, и CF не может его увидеть, поэтому я бы посмотрел в администраторе CF и посмотрел, какие пути находятся в вашем путь к классам. Перетащите JAR, который, как я полагаю, у вас есть в папку CF lib, перезапустите CF и посмотрите, имеет ли это значение.

person barnyr    schedule 22.08.2011
comment
Спасибо за дополнительную информацию - это немного проясняет ситуацию. Во-первых, у меня нет файла JAR - мне предоставили JNI dll, подходящую для интеграции в проект Java. Я надеялся, что смогу использовать это прямо из ColdFusion без необходимости писать оболочку. Я рассмотрю dll, чтобы увидеть, есть ли у нее COM-интерфейс, хотя я думаю, что это маловероятно, поскольку она была предоставлена ​​специально как интерфейс JNI для Java. - person Loftx; 22.08.2011

Я бы посоветовал вам сначала заставить его работать в Java. После этого вы помещаете сгенерированный файл jar в правильный каталог библиотеки coldfusion и загружаете (класс java) с помощью CreateObject. Класс java должен отвечать за привязку dll.

person jontro    schedule 17.08.2011
comment
Другой способ пойти, если вам просто нужен собственный интерфейс C++ для coldfusion, - это использовать их методы CFX. В некоторых случаях это может быть проще. - person jontro; 17.08.2011
comment
Привет, Бенгт - спасибо за эти предложения - в настоящее время я просто ищу самый быстрый способ работы с тем, что у меня есть (стандартная DLL C++ и DLL-оболочка JNI). В идеале я не хочу писать еще одну оболочку Java, если можно использовать dll JNI непосредственно в ColdFusion. Если нет, я посмотрю на создание оболочки с помощью методов Java или CFX. - person Loftx; 18.08.2011
comment
@Loftx - я не знаком с JNI. Но часто проще сначала запустить Java-код в java. Даже если вы не используете Java-оболочку, устранение неполадок намного проще с помощью IDE, такой как Eclipse. Как только все заработает, переведите рабочий код в CF. Они предоставили вам какие-либо примеры Java? - person Leigh; 18.08.2011