2011-08-17 13 views
1

我試圖使用ColdFusion中的CreateObject函數通過JNI訪問DLL中的功能。我設法讓ColdFusion使用java.lang.System.load函數加載DLL,但不確定如何訪問此方法中包含的函數。通過ColdFusion訪問JNI DLL中的功能

我當前的代碼:

<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 

這是可能的,我錯誤地訪問這些方法,但一直沒能找到任何信息關於在Web上使用ColdFusion中的JNI。

感謝您的幫助,

湯姆

+0

什麼樣的dll?有沒有理由不能使用createObject(「.net」)或createObject(「com」)? http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-715f.html – Leigh

+0

嗨Leigh,對不起,我不明白你的意思是「什麼樣的dll?」它已被提供給我,作爲與我需要在項目中使用的特定產品集成的手段。該提供者認爲它是與使用Java的項目集成的「最佳」。大概不可能使用.net或com對象集成任何DLL - 我認爲這是專門爲JNI編寫的。 – Loftx

+0

我的意思是他們提供了可以與createObject()一起使用的.net(甚至com)dll。對產品一無所知,這可能是一個愚蠢的問題;) – Leigh

回答

2

只有通過註冊AFAIK,才能訪問該DLL中的方法。正如其他人所建議的那樣,您可以提供一個Java包裝器(可能是JAR),然後使用該DLL,或者您必須查看DLL公開的哪些COM接口並通過createobject(type =「COM」)調用它們。

從你的代碼和錯誤的外觀,你期待一個Java類Organisation.product.package存在和CF無法看到它,所以我會看看CF管理員,看看哪些路徑在您的類路徑中。放下JAR我假設你已經進入CF的lib文件夾並重新啓動CF,看看是否有所作爲。

+0

感謝您提供更多信息 - 這讓事情變得更加清晰。首先,我沒有JAR文件 - 我已經提供了適合集成到Java項目中的JNI dll。我希望能夠直接使用ColdFusion而不需要編寫封裝。我將回顧一下dll,看看它是否有COM接口,不過我認爲這不太可能,因爲它是專門作爲Java的JNI接口提供的。 – Loftx

0

我建議你把它在Java工作第一。之後,將生成的jar文件放在正確的coldfusion lib目錄中,並使用CreateObject加載(java類)。 java類應該負責dll綁定。

+0

如果你只是想要一個ColdFusion的本地C++接口,另一種方式就是使用他們的CFX方法。在某些情況下可能更容易。 – jontro

+0

嗨Bengt - 感謝這些建議 - 我目前只是尋找最快的方式來處理我所擁有的(一個標準的C++ DLL和一個JNI包裝器DLL)。理想情況下,如果可以直接在ColdFusion中使用JNI dll,我不想再編寫另一個Java包裝器。如果不是,我會考慮用Java或CFX方法構建一個包裝器。 – Loftx

+0

@Loftx - 我不熟悉JNI。但是,首先讓java代碼運行「java」是很容易的。即使你最終沒有使用java包裝器,使用像Eclipse這樣的IDE也可以更容易地進行故障排除。一旦你開始運行,將工作代碼翻譯成CF.他們是否提供了任何Java示例? – Leigh