本文目錄一覽:
java調用dll 的有關問題
1. 編寫範例文檔
public class TestNative
{
private native static int Max(int a,int b);
public static void main(String[] args)
{
System.out.println(Max(4,5));
}
static
{
System.loadLibrary(“VCdll”);
}
}
其中
LoadLibrary中的DLL文件名稱可以隨便定.只要做好的動態鏈接庫改名成這個字符串就可以了.而native函數的來源就是該動態鏈接庫.
2. 做好該步準備以後,用javac TestNative.java生成TestNative.class. 檢驗語法.
3. 語法檢查通過以後,用javah TestNative生成TestNative.h的C++頭文件.
4. 用VC++6.0創建dll文件:
1msdev-new-project-win32 Dynamic-Link Library
2Enter project name (e.g. VCdll)
3choose “An empty DLL project”-finish
4將3生成的TestNative.h和jdk下的jni.h和jni_md.h加入到工程中去
5Create a c++ file, implements the native method. as follows:
//TestNative.cpp
#include “TestNative.h”
JNIEXPORT jint JNICALL Java_TestNative_Max
(JNIEnv * a, jclass b, jint x, jint y)
{
return x y ? x : y;
}
備註:
A 其中的jni.h通常在 jdk\include\ 可以先拷貝到VC安裝目錄下的include目錄下.一勞永逸,以後可以方便使用JNI技術.
B 全部的數據類型需要考慮Java和VC的接口問題.用jint jstring 等.
C 函數名稱和自動生成的.h文件中規定的一致.命名規則是: Java_使用類_方法名
6. 全編譯一下VC++工程.
如果沒有出錯,則此時生成動態鏈接庫成功.
把動態鏈接庫VCdll.dll拷貝到TestNative.java所在的目錄上.
7.運行java TestNative. OK :-)
參考資料:
java調用C#封裝的DLL文件
望穿秋水待伊人
非也!
1. 如果你願意採用COM組件的方式,可以一試!JAVA有COM4Java的組件(我沒記錯的話)。
先將C#的dll用COM Callerable Wrapper(CCW)封裝一下,在C++中編寫COM dll調用C#的託管dll,之後在Java中使用COM4J組件訪問這個C++編寫的COM dll組件!
如果不明白,使用Google或者Bing搜索下CCW和RCW。
2. webservice
估計你不會這樣做的,也沒必要
3. 重寫下吧,用C++
現在我有一個DLL文件,我想在JAVA中調用DLL文件中的方法,請問如何實現?
一般那種c#的dll是java不能直接調用的,但C\C++可以,你可以使用JNI。比如你要一個 public native void sengMsg(String msg); 來發送信息,先用native關鍵字聲明這個函數,然後再類裡面加一個靜態塊: static { System.loadLibrary(“msg”); } 這裡的msg是你的後來編譯的dll文件名,不是短信貓帶的。 然後寫其他的函數就可以調用這個方法了,寫完後用javac編譯,得到class文件,然後用 javah -jni 你的class文件 就會得到一個.h的頭文件,用visual studio新建一個dll,把那個.h文件包含進去,用C\C++調用你現有的dll,然後編譯得到你的msg.dll,把它複製到你的class文件目錄,然後就可以調試運行了。
原創文章,作者:UBXM,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/144246.html