2012-03-07 24 views
1

我需要在使用Java小程序的dll中調用方法。 該DLL是用C++編寫的。從小應用程序調用dll方法

是否可能,如果是的話,需要什麼東西。

任何人都可以提供樣品API

+1

可能的重複http://stackoverflow.com/questions/3719065/java-calling-dll-from-a-local-applet-im-doing-something-wrong或http://stackoverflow.com/questions/ 1713403 /調用一個小應用程序通過jni檢查此爲啓動:http://www.javaworld.com/jw-07-1998/jw-07-java-win32.html – rkosegi 2012-03-07 08:32:07

回答

3

您應該使用JNI。 看看this文章。

  1. 確保環境變量CLASSPATH,包含 提及 「[WINDIR] \的Java \ Classes下\ Classes.zip」 和 「C:」(假設 即C:是開發驅動器)。
  2. 請確保您的「[SDK-Java] \ Bin」目錄包含在您的 路徑(用於JavaH,JVC和JView)中。
  3. 確保爲命令行的使用正確設置了Visual C++。 有關詳細信息,請參閱您的Visual C++文檔。
  4. 編寫Java代碼:

    public class TestJNI { 
        public native void greetings(); 
    
        static { 
         System.loadLibrary("greet"); 
        } 
    
        public static void main(String args[]) { 
         new TestJNI().greetings(); 
        } 
    } 
    
  5. 編譯Java文件:

    jvc TestJNI.java 
    
  6. 運行JAVAH上生成的類文件:

    javah -jni TestJNI 
    
  7. 編寫C /基於生成的頭文件的C++代碼:

    #include "TestJNI.h" 
    #include <stdio.h> 
    
    JNIEXPORT void JNICALL Java_TestJNI_greetings(JNIEnv *env,jobject jobj) { 
        printf("Hello from Visual C++!"); 
    } 
    
  8. 編譯C/C++代碼:

    cl greet.cpp -Ic:\sdk-java.31\include -Fegreet.dll -MD -LD 
    
  9. 測試應用程序:

    jview TestJNI 
    
+0

我標記希望你不介意 – MByD 2012-03-07 08:34:15

+0

@Binyamin Sharet,welcome :) – aviad 2012-03-07 08:35:05

0

見rkosegi重新鏈接的線程。 '可信的代碼' - 重要的是要理解。 aviad已經涵蓋了一個方法的許多細節。這篇文章只是關注部署本地人。

使用本機的小應用程序的真正問題是讓本機安裝在小應用程序可以訪問它們的地方。這就是使用Java Web Start部署applet變得有用的地方。根據OS &體系結構(32/64位),JWS不僅可以對本機的下載進行分區,還可以在應用程序的運行時類路徑上使本機可用,以便加載。

從「新一代」插件(例如Sun的1.6.0_10 +)開始,JWS可以部署嵌入式小程序(以前它只能自由浮動地啓動它們)。

但是,那麼爲什麼你想要一個applet呢?

更好替代方案通常是直接從鏈接啓動自由浮動框架(使用JWS)。同樣的安全限制適用,但部署更容易,用戶體驗更好。

+0

嗨@Andrew我只想說,爲了讀這個問題的人的好處,JWS不是奇蹟般的治療方法。它有一個令人討厭的錯誤,緩存將被破壞,然後它不會再加載你的應用程序,直到手動清除緩存。如果我記得好的話,在購買Sun之前,這個bug已經存在,他們只是不在乎。我們有一個支持人員在他的一天大部分時間向電話會計師解釋如何清除他們的Java緩存(許多人只是不明白)。不好! – 2012-06-04 18:42:40

+0

*「JWS不是一個奇蹟般的治療方法。」*由於這很明顯,所以我不知道你爲什麼要提起它。 *「它有一個討厭的bug」*所有不平凡的應用程序。有錯誤。 – 2012-06-05 00:39:42

+0

「所有不平凡的應用程序都有錯誤」是的。問題是在這種情況下,*他們不修復它*。我認爲任何依靠運行/部署產品的框架/工具中的任何錯誤都很糟糕,以至於很可能會讓許多客戶付出代價,以及哪些*您無法修復或自行解決問題*,值得一提的是未來的用戶。我不是批評你,而是WebStart;對不起,你似乎正在親自採取。 – 2012-06-05 11:09:30

相關問題