2011-08-17 3 views
1

J'essaie d'utiliser la fonction CreateObject dans ColdFusion pour accéder aux fonctionnalités d'une DLL via JNI. J'ai réussi à faire en sorte que ColdFusion charge la DLL en utilisant la fonction java.lang.System.load, mais je ne sais pas comment accéder aux fonctions contenues dans cette méthode.Accès aux fonctionnalités de la DLL JNI via ColdFusion

Mon code actuel:

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

qui échoue sur la ligne 2 avec l'erreur

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

Il est possible que je suis accès à ces méthodes de manière incorrecte, mais n'ont pas été en mesure de trouver des informations à propos de l'utilisation de JNI dans ColdFusion sur le Web.

Merci pour votre aide,

Tom

+0

Quel genre de DLL? Y at-il une raison pour laquelle vous ne pouvez pas utiliser createObject (". Net") ou createObject ("com")? http://help.adobe.com/fr_FR/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-715f.html – Leigh

+0

Bonjour Leigh, je suis désolé, je ne comprends pas ce que vous voulez dire par "quel genre de dll?" Il m'a été fourni comme un moyen d'intégration avec un produit particulier que j'ai besoin d'utiliser dans un projet. Le fournisseur le suggère comme le «meilleur» pour s'intégrer à son projet en utilisant Java. On peut supposer qu'il n'est pas possible d'intégrer une DLL à l'aide d'objets .net ou com - j'ai supposé que celle-ci avait été spécifiquement écrite pour JNI. – Loftx

+0

Je voulais simplement dire qu'ils fournissaient une DLL .net (ou même com) qui pourrait être utilisée avec createObject(). Ne sachant rien sur le produit, cela peut être une question stupide;) – Leigh

Répondre

2

Vous n'aurez pas accès aux méthodes de cette DLL simplement en l'enregistrant AFAIK. Soit vous recevez un wrapper Java (probablement en JAR) qui utilisera ensuite la DLL, soit vous devez voir quelles interfaces COM la DLL expose et les appeler via createobject (type = "COM"), comme d'autres l'ont suggéré. Du point de vue de votre code et de votre erreur, vous vous attendez à ce qu'une classe Java Organisation.product.package soit présente et que CF ne puisse pas la voir. Je vais donc jeter un coup d'œil à l'administrateur des FC et voir lequel les chemins sont dans votre classpath. Déposez le JAR Je suppose que vous avez dans le dossier lib de CF et redémarrez CF et voir si cela fait une différence.

+0

Merci pour les informations supplémentaires - cela rend les choses un peu plus claires. Tout d'abord, je n'ai pas de fichier JAR - j'ai reçu un dll JNI adapté à l'intégration dans un projet Java. J'espérais que je serais capable de l'utiliser directement depuis ColdFusion sans avoir besoin d'écrire un wrapper.Je passerai en revue la DLL pour voir si elle a une interface COM, bien que je pense que c'est peu probable car il a été fourni spécifiquement en tant qu'interface JNI à Java. – Loftx

0

Je vous suggère de le faire fonctionner en java premier. Après cela, vous placez le fichier jar généré dans le répertoire lib coldfusion correct et chargez (la classe java) en utilisant CreateObject. La classe java devrait être responsable de la liaison dll.

+0

Une autre façon d'aller si vous voulez juste une interface C++ native à coldfusion est d'utiliser leurs méthodes CFX. Cela pourrait être plus facile dans certains cas. – jontro

+0

Salut Bengt - merci pour ces suggestions - Je suis actuellement à la recherche de la façon la plus rapide de travailler avec ce que j'ai (une DLL C++ standard et une DLL wrapper JNI). Idéalement, je ne veux pas avoir à écrire un autre wrapper Java s'il est possible d'utiliser la DLL JNI directement dans ColdFusion. Si ce n'est pas le cas, je chercherai à construire un wrapper soit en Java, soit en CFX. – Loftx

+0

@Loftx - Je ne suis pas familier avec JNI. Mais il est souvent plus facile d'obtenir du code Java en "java" en premier. Même si vous n'utilisez pas un wrapper java, le dépannage est beaucoup plus facile avec un IDE comme Eclipse. Une fois que tout fonctionne, traduisez le code de travail en CF. Vous ont-ils fourni des exemples de Java? – Leigh

Questions connexes