當前位置:首頁 » 編程軟體 » java編譯生成dll

java編譯生成dll

發布時間: 2022-02-24 03:47:10

⑴ 用java怎麼調用C語言已經編寫好的DLL

1.用System.getProperty("user.dir"),獲取程序的路徑,估計你的應該是 E:\\測試程序不清楚列印一下就可以了。System.getProperty("user.dir") + "\\DLL\\CardAPI"2.unsigned char 用char就可以了unsigned int 用int就可以了,java的int值很大.....C的無符號的記得是65535 unsigned char*、和unsigned int* 這兩個是指針,第一個是取1位地址內容的,第二個根據系統而定,一般是取4位地址值的,用java 的String對應,應該可以 。

⑵ java中怎麼編寫dll文件........最好舉個例子

你是指使用動態鏈接嗎?這個可以用java中的反射機製做到,但是java中是沒有動態鏈接庫這種東西的。如果你指的是java調用本地dll的話,是使用jni技術,dll也不是java編寫的。總是java是不可能編譯成為dll。有一種這種的方案,就是將java編譯的文件轉換為c#的,微軟有相應的工具,可以搜到,然後就可以打包成為dll了。

⑶ 如果用java寫一個dll、需要不要在使用這個dll的程序上面再去安裝java的運行環境

朋友你問的問題有點太搞笑了吧,java編寫的文件編譯後是.class的文件,只有使用C/C++,VB這些東西才能編寫出DLL文件。java文件是需要JDK才能運行的,DLL文件叫動態鏈接庫,是不能直接運行的。

⑷ java程序能直接調用C寫好的dll文件嗎

JAVA通過JNI調用本地方法,而本地方法是以庫文件的形式存放的(在WINDOWS平台上是DLL文件形式,在UNIX機器上是SO文件形式)。通過調用本地的庫文件的內部方法,使JAVA可以實現和本地機器的緊密聯系,調用系統級的各介面方法。
簡單介紹及應用如下:
一、JAVA中所需要做的工作
在JAVA程序中,首先需要在類中聲明所調用的庫名稱,如下:
static {
System.loadLibrary(「goodluck」);
}

在這里,庫的擴展名字可以不用寫出來,究竟是DLL還是SO,由系統自己判斷。
還需要對將要調用的方法做本地聲明,關鍵字為native。並且只需要聲明,而不需要具 體實現。如下:
public native static void set(int i);
public native static int get();
然後編譯該JAVA程序文件,生成CLASS,再用JAVAH命令,JNI就會生成C/C++的頭文件。
例如程序testdll.java,內容為:
public class testdll
{
static
{
System.loadLibrary("goodluck");
}
public native static int get();
public native static void set(int i);

public static void main(String[] args)
{
testdll test = new testdll();
test.set(10);
System.out.println(test.get());
}
}

用javac testdll.java編譯它,會生成testdll.class。
再用javah testdll,則會在當前目錄下生成testdll.h文件,這個文件需要被C/C++程序調用來生成所需的庫文件。

⑸ dll 文件如何做 java 語言編出的程序不能做成 dll 文件嗎

dll是動態鏈接庫文件,鏈接什麼庫呢? 鏈接的是windows的庫! 而Java是跨平台的,根本不依賴於windows,你說Java會不會做出dll呢?

⑹ java 調用C寫的DLL

一、 生成C的頭文件
1. 編輯Main.java
public class Main
{
public native static int getStrNum(byte str[], int strLen);
}
2. 生成頭文件
按win + r打開「運行」窗口,輸入「cmd」,打開DOS控制台窗口。進入上面Main.java所在的目錄中,輸入:
javac Main.java
javah Main
兩條命令完成後會生成Main.h文件
二、 生成DLL
1. 新建空工程
在VS中新建工程:Win32 Console Application,取名「MakeDLL」,選擇空工程。新建後修改工程屬性:
(1) General中,將「Configuration Type」改為「Dynamic Library (.dll)」;
(2) C/C++的General中,將「Additional Include Directories」添加兩項:
「C:Program FilesJavajdk1.5.0_06include」
「C:Program FilesJavajdk1.5.0_06includewin32」
根據你安裝的JAVA路徑而設置,這是因為在C/C++編譯過程中要使用JAVA的jni.h等文件
2. 將上面生成的Main.h添加入工程
3. 新建一個新的文件main.cpp,代碼如下:
#include 』Main.h』
#include 』string.h』
JNIEXPORT jint JNICALL Java_Main_getStrNum(JNIEnv *env, jclass cls, jbyteArray str, jint strLen)
{
jbyte *buffer = (*env).GetByteArrayElements(str, 0);
buffer[strLen] = 』』; // 由於JAVA自動分配空間,需要傳進來字元串長度參數
jint len = strlen((char*)buffer);
return len;
}
4. 按F7編譯鏈接,生成MakeDLL.dll文件
三、 JAVA調用DLL
在JAVA中使用上面生成的DLL文件:
1. 將MakeDLL.dll復制到與使用DLL的JAVA文件相同的目錄下。
2. JAVA文件的源代碼:
public class Main
{
static
{
System.loadLibrary(』MakeDLL』);//載入資源文件MakeDLL.dll
}
public native static int getStrNum(byte str[], int strLen);
public static void main(String[] args)
{
Main instance = new Main();
String str = new String(』haha』);
int num = instance.getStrNum(str.getBytes(), str.length());
System.out.println(num);
}
}

⑺ 如何用Java調用c++生成的dll文件

1
首先要安裝好Visual Studio 2010 (其他版本也行)以及JDK(別忘了配置環境變數),然後安裝Eclipse。以上軟體安裝可自行網路,有很多資料。
2
進入正題,首先在Eclipse中新建工程,File->New->Java Project

3
然後右擊DllTest,New->package,再右擊src目錄下的com包,New->Class。這樣我們的Java項目就建好了。

4

建好的類文件Dlltest.java里添加代碼。主要是導入dll文件的loadlibrary函數和要調用的函數聲明shanfei。代碼詳
見 http://blog.csdn.net/lovesummerforever/article/details/25827199

END
編譯Java工程並生成VC要用到的頭文件

1

在打開cmd,先進到當前java文件所在的目錄,用cd xxx\xxx
命令即可,返回上一級目錄用cd..命令(注意後面的倆點)。到當前目錄,也就是com文件夾下,輸入javac Dlltest.java
指令編譯java文件生成Dlltest.class文件,就在com文件夾下。

2

後再回到上級目錄,就是com文件夾的上一層src目錄(cd..命令),執行javah命令生成頭文件(頭文件DllTest.h就在com的上層文件
夾src中),此處一定注意執行javah命令(javah -classpath . -jni
com.DllTest,注意點兩邊的空格)的目錄,目錄錯誤就會報錯(如上圖所示)。
END
建立VC++工程,生成dll文件

1
打開Visual Studio 2010,新建項目,選擇win32項目

2
下一步,選擇,dll項目,勾選空項目,點擊完成,一個空的dll項目就建好了。

3
還記得之前java項目中生成的DllTest.h文件嗎?它就是Java為C++項目指定的頭文件,java生成頭文件,c++里只需要將頭文件里聲明的函數實現就好了。首先把頭文件復制到C++項目的目錄下並導入到解決方案的頭文件目錄下。

4
新建一個cpp文件,文件名最好與頭文件一致(不一樣也可以),在這個cpp文件中我們要實現頭文件中的函數,需要注意的是函數頭必須跟DllTest.h中的一樣,不能出錯。加完代碼,會發現包含的頭文件jni.h和jni_md.h出錯了,下一步就來解決它。

5

個cpp文件中需要包含兩個java安裝目錄下的頭文件:jni.h和jni_md.h,分別位於java安裝目錄下的include文件夾和
include里的win32文件夾內。找到這兩個文件,復制到Visual Studio VC 2010
的頭文件包含目錄中(我的是MicroSoft Visual Studio
10.0\VC\Include,如圖)。當然也可以把頭文件之直接復制到當前項目的目錄下(記得把代碼改為#include
「jni.h」),但是這樣每次新建項目都得復制粘貼。

6
復制完之後頭文件如果還報錯,就檢查一下VS的包含目錄,確認你把頭文件復制到VS的默認包含目錄中。屬性管理器->Debug->User->通用屬性->VC++目錄->包含目錄(include),添加剛才放置頭文件的目錄即可。

7
解決了上述問題,就可以嘗試編譯項目生成dll文件了,在debug或release模式下點擊生成解決方案,生成成功後到項目目錄的debug或release目錄下找到相應的dll文件。
END
在Java中調用c++生成的dll文件

1
生成了dll文件,終於到了最後一步。把生成的dll文件復制到Java項目的目錄下,注意不是放在com文件夾,也不是src文件夾,是DllTest文件夾內,跟src同級,否則會報錯。

2
還有一點需要注意的是,在Java文件內用LoadLibrary函數調用的庫名必須與Dll文件名一致,而不是跟java類名一致,這點可以參考java 部分的代碼。確認完上述問題,點擊運行,稍等片刻就可以看到運行結果,java&dll之旅到此結束。

⑻ Java裡面的jar包是否就相當於c#編譯生成的dll文件

dll文件,俗稱動態鏈接庫文件,是有執行程序可調用的二進制文件,也就是計算機能識別的二進制代碼,任何語言都可以調用。只是方法不同而已。

jar文件,一般是由java虛擬機解析的,其實相當於將一系列的位元組碼文件(.java文件)或者包,java虛擬機這些文件通過一些演算法序列化(壓縮),就形成了jar文件。但程序需要執行時java虛擬機將位元組碼文件再次編譯成二進制文件供計算機執行。

PS:這就是java是跨平台的原因。所有程序的位元組碼文件相同。不同操作系統上只需安裝不同的java虛擬機就可以執行相同的程序。

⑼ java編譯出來的class 文件能否做成 dll 文件

dll: 動態鏈接庫(dynamic link lib),Java鏈接windows的庫干什麼??!如果用dll就不是平台無關了。

想做dll就做c/c++的windows編程吧。

⑽ 請問:Java能編寫DLL嗎

貌似不能(不是不確切,是我的口頭禪)
因為Java編程是跨平台的,它不可能只編寫適用了Windows平台的東西。不過它有相應的東西,這個可以適用於Linux等等平台的!

熱點內容
qtc比python好用 發布:2025-01-16 18:39:48 瀏覽:488
電腦有免費伺服器嗎 發布:2025-01-16 18:35:28 瀏覽:220
sql生成唯一 發布:2025-01-16 18:35:25 瀏覽:223
圖片滾動源碼 發布:2025-01-16 18:35:18 瀏覽:300
運維和php 發布:2025-01-16 18:21:46 瀏覽:877
舊電腦改web伺服器 發布:2025-01-16 18:20:49 瀏覽:49
喝酒最好的解壓方法 發布:2025-01-16 18:19:05 瀏覽:524
壓縮包設置了密碼 發布:2025-01-16 18:18:13 瀏覽:647
android圖片瀏覽器源碼 發布:2025-01-16 18:08:54 瀏覽:652
編譯代碼技巧 發布:2025-01-16 18:06:26 瀏覽:647